Azure SDK 的早期版本具有CloudBlob.CopyFromBlob()
同步的并且我们在代码中使用。我们现在需要迁移到 SDK 2.4 并且那里没有这样的方法,而是CloudBlockBlob.StartCopyFromBlob()
返回一些魔术令牌,我们可以使用它来检查复制是如何完成的。
在我们的代码中对 blob 进行“后台”复制是没有意义的——同步进行复制就可以了,因此最好CopyFromBlob()
使用较新 SDK 中的东西以某种方式实现与旧的等效。
这是我的方法:
CloudBlockBlob sourceBlob = sourceContainer.GetBlockBlobReference(sourcePath);
CloudBlockBlob targetBlob = targetContainer.GetBlockBlobReference(targetPath);
var copyToken = targetBlob.StartCopyFromBlob(sourceBlob.Uri);
while( true ) {
System.Threading.Thread.Sleep(100);
CloudBlockBlob target = targetContainer.GetBlockBlobReference(targetPath);
bool greatSuccess = false;
switch( target.CopyState.Status ) {
case CopyStatus.Success:
greatSuccess = true;
break;
case CopyStatus.Pending:
continue;
default:
throw new Exception( "Failed to copy" );
}
if( success ) {
break;
}
}
它看起来工作,但我不确定那里没有潜在的问题。
StartCopyFromBlob()
使用然后等待副本完成的惯用方式是什么?