CloudBlobClient.startCopyAsync()

时间:2018-06-14 22:56:31

标签: azure azure-storage azure-storage-blobs azure-blob-storage

来自CloudBlobClient.StartCopyAsync()函数的documentation

它说

  

启动异步操作以开始将另一个块blob的内容,属性和元数据复制到此块blob。

我希望知道该过程启动或完成后该函数是否会返回。如果执行这个函数open-sourced?

这是一个部分课程: https://github.com/Azure/azure-storage-net/blob/master/Lib/WindowsRuntime/Blob/CloudBlobClient.cs

1 个答案:

答案 0 :(得分:2)

在内部,CloudBlockBlob.StartCopyAsync()调用Copy Blob REST API。

一旦进程启动,该函数将返回:

  

在2012-02-12及更高版本中, Copy Blob操作可以异步完成。此操作返回可用于检查或中止复制操作的副本ID。 Blob服务以尽力而为的方式复制blob

     

复制操作的源blob可以是块blob,附加blob或页面blob或快照。如果目标blob已存在,则它必须与源blob具有相同的blob类型。任何现有的目标blob都将被覆盖。复制操作正在进行时,无法修改目标blob。

     

在2015-02-21及更高版本中,复制操作的源也可能是Azure文件服务中的文件。如果源是文件,则目标必须是块blob。

以下是调用CloudBlockBlob.StartCopyAsync()后主动检查复制状态的源代码:

await targetCloudBlob.StartCopyAsync(sourceCloudBlob.Uri);

while (targetCloudBlob.CopyState.Status == CopyStatus.Pending)
{
    await Task.Delay(100);
    await targetCloudBlob.FetchAttributesAsync();
}

if (targetCloudBlob.CopyState.Status != CopyStatus.Success)
{
    Console.WriteLine("Copy failed: {0}", targetCloudBlob.CopyState.Status);
}