我有一个服务器,该服务器获取azure blob文件的URL(SAS只读)并将其复制到其他存储帐户中的另一个blob。复制命令是异步命令(StartCopyAsync()
)。
复制文件只是该服务器要做的一件事,它要做的更多。如果另一个计算中的一个(或多个)失败,则抛出异常。
发生异常时,我进行回滚-这意味着删除在第一阶段复制的文件。我这样做是这样的:
await backupFile.DeleteIfExistsAsync();
我收到此错误代码:
System.AggregateException: One or more errors occurred. (There is currently a pending copy operation.)
---> Microsoft.WindowsAzure.Storage.StorageException: There is currently a pending copy operation.
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteAsyncInternal[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext, CancellationToken token) at Microsoft.WindowsAzure.Storage.Blob.CloudBlob.DeleteIfExistsAsync(DeleteSnapshotsOption deleteSnapshotsOption, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext, CancellationToken cancellationToken)
我猜是因为异步副本尚未完成...
是否可以通过在复制命令完成后执行异步删除命令来解决此问题?
任何其他解决方案都将受到欢迎。谢谢!
答案 0 :(得分:0)
我建议您尝试接受{strong> CancellationToken 的StartAsyncCopy()
重载。使用该重载后,您应该能够通过调用该方法时使用的 CancellationToken 的 CancellationTokenSource 取消复制操作。
有关所有可用的重载,请参见CloudBlockBlob.StartCopyAsync Method。您还可以查看CancellationTokenSource Class,了解如何使用取消机制。
更新
如下面的评论中所述,如果操作已经开始,您还应该查看CloudBlob.AbortCopyAsync()
。
希望有帮助!