Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在使用blob StartCopySync时获取azure blob的更新副本状态_C#_Azure_Azure Storage Blobs - Fatal编程技术网

C# 如何在使用blob StartCopySync时获取azure blob的更新副本状态

C# 如何在使用blob StartCopySync时获取azure blob的更新副本状态,c#,azure,azure-storage-blobs,C#,Azure,Azure Storage Blobs,我有一些c#代码,可以将blob从一个存储帐户复制到另一个存储帐户。我注意到,当我调用CloudBlob.startCopySync时,目标blob的CopyState.Status设置为CopyStatus.Pending。是否有任何方法可以获取复制操作的更新状态 我尝试添加了一个wait Task.Delay(TimeSpan.FromSeconds(10))

我有一些c#代码,可以将blob从一个存储帐户复制到另一个存储帐户。我注意到,当我调用
CloudBlob.startCopySync
时,目标blob的
CopyState.Status
设置为
CopyStatus.Pending
。是否有任何方法可以获取复制操作的更新状态

我尝试添加了一个
wait Task.Delay(TimeSpan.FromSeconds(10))CopyStatus==null

轮询复制Blob属性:我们现在提供以下附加属性,允许用户跟踪复制、使用或复制的进度:

x-ms-copy-status(或CopyStatus):复制操作的当前状态。它可以是以下内容之一: 挂起:复制操作挂起。 成功:复制操作已成功完成。 中止:客户端中止了复制操作。 失败:由于错误,复制操作无法完成

x-ms-copy-id(CopyId):复制操作返回的id,可用于监视进度或中止复制

x-ms-copy-status-description(CopyStatusDescription):可用于诊断的其他错误信息

x-ms-copy-progress(CopyProgress):到目前为止复制的blob量。其格式为X/Y,其中X=复制的字节数,Y是总字节数

x-ms-copy-completion-time(CopyCompletionTime):最后一份的完成时间

可以监视这些属性以跟踪返回“挂起”状态的复制操作的进度。但是,需要注意的是,除了Put Page、Put Block和Lease Blob操作外,目标Blob上的任何其他写入操作(即Put Blob、Put Block List、Set Blob Metadata、Set Blob Properties)都将删除与复制操作相关的属性

请注意,您需要定期从Azure存储服务器端轮询复制状态,
wait Task.Delay(TimeSpan.FromSeconds(10))实际上什么都不做

public static void MonitorCopy(CloudBlobContainer destContainer)
{
    bool pendingCopy = true;

    while (pendingCopy)
    {
        pendingCopy = false;
        var destBlobList = destContainer.ListBlobs(
            true, BlobListingDetails.Copy);

        foreach (var dest in destBlobList)
        {
            var destBlob = dest as CloudBlob;

            if (destBlob.CopyState.Status == CopyStatus.Aborted ||
                destBlob.CopyState.Status == CopyStatus.Failed)
            {
                // Log the copy status description for diagnostics 
                // and restart copy
                Log(destBlob.CopyState);
                pendingCopy = true;
                destBlob.StartCopyFromBlob(destBlob.CopyState.Source);
            }
            else if (destBlob.CopyState.Status == CopyStatus.Pending)
            {
                // We need to continue waiting for this pending copy
                // However, let us log copy state for diagnostics
                Log(destBlob.CopyState);

                pendingCopy = true;
            }
            // else we completed this pending copy
        }

        Thread.Sleep(waitTime);
    };
}

谢谢你只需要换一下。ListBlobs的第一个参数现在是前缀,所以您需要使用命名参数