繁体   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