2012-10-06 30 views
0

我想一邊寫流,直到它completes.Following代碼租用一個blob:租賃斑點而寫流成團塊,直到它完成

方案1:

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

如果我收購首先blob上的租約,需要上傳的內容會拋出異常,因爲blob已被鎖定。

方案2:

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

因爲我上傳的內容同步團塊,blob.AcquireLease()語句將得到執行,只有當上傳completed.If這種情況什麼這樣做的好處。

  1. 基本上我正在尋找建議,在開始上傳內容和發佈鎖定上傳完成之前,我可以鎖定/租用blob。
  2. 我們只能在90秒內(默認)租用一個blob。如果blob.upload需要超過90秒(考慮文件大小爲100MB),我想知道如何繼續續租,直到上傳完成。

回答

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找到代碼。類似的東西應該適合你。

+0

當續約過期(比如當你的箱子處於重負載下)並且租約隨後到期時,是否會出現這種情況?例如,對於Node.js,任務的計時器只能保證任務不會提前啓動,因此可能會發生此情況。 –

+0

評論不是一個提出新問題的好地方(特別是5歲的答案)。如果你想得到答案,請提交一個新問題。 – smarx