C# 如何在使用blob StartCopySync时获取azure blob的更新副本状态
我有一些c#代码,可以将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))
CloudBlob.startCopySync
时,目标blob的CopyState.Status
设置为CopyStatus.Pending
。是否有任何方法可以获取复制操作的更新状态
我尝试添加了一个wait Task.Delay(TimeSpan.FromSeconds(10))调用后,但当延迟结束时,状态仍显示为挂起。如果然后尝试从存储容器重新获取blob,则会得到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的第一个参数现在是前缀,所以您需要使用命名参数