我想在编写流时租借一个blob,直到它completes.Following代码为止:
设想1:
blob.AcquireLease();
blob.UploadText("Content");
blob.Release();如果我首先获得了blob的租约,需要上传的内容会抛出一个异常,因为blob已经被锁定。
设想2:
blob.uploadText("Content");
blob.AcquireLease();
blob.Release();因为我同步地将内容上传到blob,所以只有当upload是completed.If时,blob.AcquireLease()语句才会被执行--这种情况有其优点。
发布于 2012-10-07 03:21:48
只有拥有租约时,才能修改租赁的blob。这意味着你必须将租约连同你的请求一起通过。
类似这样的代码应该可以工作(警告:没有测试,甚至编译过):
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找到代码。类似的东西应该适用于你。
发布于 2022-06-15 18:00:20
以这种方式锁定对于块块是不必要的,在我的经验中,这是最常见的块类型。块块的更新是原子的。
当您想防止被覆盖时,如果blob的ETag与预期的ETag不同,则该blob头会使请求失败。如果blob还不存在(因此没有预期的ETag ),则If-None-Match: *防止覆盖任何blob。
您可以在文档中阅读在Blob存储中管理并发性文章中有关该主题的更多内容。
https://stackoverflow.com/questions/12763099
复制相似问题