1

それが完了するまでストリームを書き込んでいる間、私はブロブをリースしたいと思います.次のコード:

シナリオ 1:

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

最初に BLOB のリースを取得すると、BLOB が既にロックされているため、コンテンツをアップロードする必要があるときに例外がスローされます。

シナリオ 2:

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

コンテンツを blob に同期的にアップロードしているため、blob.AcquireLease() ステートメントは、アップロードが完了したときにのみ実行されます。この場合、これの利点は何ですか。

  1. 基本的に、コンテンツのアップロードを開始する前にブロブをロック/リースし、アップロードが完了したらロックを解除できる提案を探しています。
  2. blob を 90 秒間しかリースできません (既定では)。blob.upload に 90 秒以上かかる場合 (ファイル サイズが 100 MB であることを考慮)、アップロードが完了するまでリースを更新し続ける方法を知りたいです。
4

1 に答える 1

4

リースを所有している場合にのみ、リースされた BLOB を変更できます。つまり、リクエストとともにリースを渡す必要があります。

このコードのようなものは動作するはずです (注意: テストされていないか、コンパイルされていません):

var leaseId = blob.AcquireLease();
blob.UploadText("Content", Encoding.UTF8, AccessCondition.GenerateLeaseCondition(leaseId), null);
blob.ReleaseLease(AccessCondition.GenerateLeaseCondition(leaseId));

考えてみると、上記のコードは機能しましたか? ReleaseLease少なくとも 1 つのパラメータが必要ですね。

2 番目の質問については、リースはデフォルトで最大 60 秒 (90 秒ではない) だと思います。ストレージ クライアント ライブラリがリースをサポートする前に、私はそのための独自のコードを作成し、AutoRenewLease45 秒ごとにリースを更新してリースを失わないようにするクラスを作成しました。コードはhttps://github.com/smarx/WazStorageExtensionsにあります。似たようなことがうまくいくはずです。

于 2012-10-07T03:21:48.987 に答える