首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将流写入blob时租赁blob,直到blob完成

将流写入blob时租赁blob,直到blob完成
EN

Stack Overflow用户
提问于 2012-10-06 19:30:29
回答 2查看 2K关注 0票数 1

我想在编写流时租借一个blob,直到它completes.Following代码为止:

设想1:

代码语言:javascript
复制
  blob.AcquireLease();
  blob.UploadText("Content");
  blob.Release();

如果我首先获得了blob的租约,需要上传的内容会抛出一个异常,因为blob已经被锁定。

设想2:

代码语言:javascript
复制
  blob.uploadText("Content");
  blob.AcquireLease();
  blob.Release();

因为我同步地将内容上传到blob,所以只有当upload是completed.If时,blob.AcquireLease()语句才会被执行--这种情况有其优点。

  1. 基本上,我正在寻找的建议,我可以锁定/租赁之前,开始上传内容和释放锁上传完成。
  2. 我们只能租用一个blob 90秒(默认情况下).If blob.upload需要超过90秒(考虑到文件大小是100 we ),我想知道如何继续续签直到上传完成。
EN

回答 2

Stack Overflow用户

发布于 2012-10-07 03:21:48

只有拥有租约时,才能修改租赁的blob。这意味着你必须将租约连同你的请求一起通过。

类似这样的代码应该可以工作(警告:没有测试,甚至编译过):

代码语言:javascript
复制
var leaseId = blob.AcquireLease();
blob.UploadText("Content", Encoding.UTF8, AccessCondition.GenerateLeaseCondition(leaseId), null);
blob.ReleaseLease(AccessCondition.GenerateLeaseCondition(leaseId));

想想看,上面的代码是否有效?ReleaseLease至少需要一个参数,不是吗?

关于你的第二个问题,我认为租约默认是60秒(而不是90秒)。在存储客户端库支持租约之前,我为此构建了自己的代码,并创建了一个名为AutoRenewLease的类,它每45秒更新一次租约,以确保不会丢失租约。您可以在https://github.com/smarx/WazStorageExtensions找到代码。类似的东西应该适用于你。

票数 5
EN

Stack Overflow用户

发布于 2022-06-15 18:00:20

以这种方式锁定对于块块是不必要的,在我的经验中,这是最常见的块类型。块块的更新是原子的。

当您想防止被覆盖时,如果blob的ETag与预期的ETag不同,则该blob头会使请求失败。如果blob还不存在(因此没有预期的ETag ),则If-None-Match: *防止覆盖任何blob。

您可以在文档中阅读在Blob存储中管理并发性文章中有关该主题的更多内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12763099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档