簡體   English   中英

如何判斷Microsoft.WindowsAzure.Storage.DataMovement.TransferManager的CopyDirectoryAsync完成了?

[英]How can I tell when CopyDirectoryAsync from Microsoft.WindowsAzure.Storage.DataMovement.TransferManager has finished?

我正在嘗試將許多容器從一個Azure Blob存儲帳戶復制到另一個Blob存儲帳戶。

我正在將Microsoft.WindowsAzure.Storage.DataMovement庫用於C#和TransferManager.CopyDirectoryAsync方法。

我發現所有容器都沒有問題,但是當我嘗試復制容器時,沒有收到關於已復制的Blob的反饋。 我想復制數百萬個Blob,因此需要完成時的反饋。 我正在使用異步服務器端副本,IE isServiceCopy = true

我在打電話

return await TransferManager.CopyDirectoryAsync(sourceDirectory, 
destinationDirectory, true, options, null).ConfigureAwait(false);

由於我正在等待,因此我希望它不會在復制完成之前從這一行通過。 但是它幾乎立即通過,如果我檢查TransferStatus結果上的NumberOfFilesTransferred ,則它始終為0 即使我在while循環中反復檢查結果,該數字也不會從0更改。 但是,如果我簽入Azure門戶,則所有期望的文件都已成功復制。

我也嘗試過在DirectoryTransferContext上設置ProgressHandler ,它被調用了幾次,但是所有屬性均為0

有誰知道為什么我沒有從副本中得到任何反饋?

提前致謝。 克里斯

這是不正確的:

CloudBlobDirectory sourceDirectory = sourceContainer.GetDirectoryReference(".");
CloudBlobDirectory destinationDirectory = destinationContainer.GetDirectoryReference(".");

請注意,Azure Blob存儲沒有真正的文件夾層次結構,此處的參數實際上是Blob容器中Blob的前綴。 因此,請將代碼更改為:

CloudBlobDirectory sourceDirectory = sourceContainer.GetDirectoryReference(string.Empty);
CloudBlobDirectory destinationDirectory = destinationContainer.GetDirectoryReference(string.Empty);

您可以輪詢Blob的CopyState 有關詳細信息,請參見https://stackoverflow.com/a/42255582

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM