我想在向它写入流时租用blob直到它完成。以下代码:
情景1:
blob.AcquireLease();
blob.UploadText("Content");
blob.Release();
如果我首先获取blob上的租约,则需要上传的内容会抛出异常,因为blob已被锁定。
情景2:
blob.uploadText("Content");
blob.AcquireLease();
blob.Release();
由于我将内容同步上传到blob,blob.AcquireLease()语句只有在上传完成时才会执行。如果是这样的话就会有这个优势。
答案 0 :(得分:3)
如果您拥有租约,则只能修改租借的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找到代码。类似的东西对你有用。