如何判断Microsoft.WindowsAzure.Storage.DataMovement.TransferManager中的CopyDirectoryAsync何时完成?

时间:2017-11-20 07:44:02

标签: c# azure azure-storage azure-storage-blobs

我正在尝试将许多容器从一个Azure blob存储帐户复制到另一个blob存储帐户。

我正在使用Microsoft.WindowsAzure.Storage.DataMovement库来使用C#和TransferManager.CopyDirectoryAsync方法。

我发现所有容器都没有问题,但是当我尝试复制容器时,我没有得到有关已复制的blob的反馈。我想复制数以百万计的blob,所以我希望在完成时提供反馈。我正在使用异步服务器端副本,I.E。 isServiceCopy = true

我正在打电话

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

因为我在等待,所以我希望在复制完成之前不要从此行传递。但它几乎立即通过,如果我检查NumberOfFilesTransferred结果上的TransferStatus,它始终是0。即使我在while循环中重复检查结果,此数字也不会从0更改。但是,如果我签入Azure门户,则所有预期的文件都已成功复制。

我还尝试在ProgressHandler上设置DirectoryTransferContext,并且它会被调用几次,但所有属性都是0

有谁知道为什么我没有从副本中得到任何反馈?

提前致谢。克里斯

2 个答案:

答案 0 :(得分:1)

这是不正确的:

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

请注意,Azure Blob存储没有真正的文件夹层次结构,此处的参数实际上是blob容器中blob的前缀。因此,请将代码更改为:

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

答案 1 :(得分:0)

您可以轮询blob的CopyState。有关详细信息,请参阅https://stackoverflow.com/a/42255582