1

我想在向它写入流的同时租用一个 blob 直到它完成。以下代码:

场景一:

  blob.AcquireLease();
  blob.UploadText("Content");
  blob.Release();

如果我首先获得 blob 的租约,则需要将内容上传到哪个内容会引发异常,因为 blob 已经被锁定。

场景二:

  blob.uploadText("Content");
  blob.AcquireLease();
  blob.Release();

由于我将内容同步上传到blob,blob.AcquireLease()语句只有在上传完成后才会执行。如果是这种情况,这样做有什么好处。

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

1 回答 1

4

如果您拥有租约,则只能修改租用的 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找到代码。类似的东西应该适合你。

于 2012-10-07T03:21:48.987 回答