C#+ Azure存储Blob:StorageException:当前有一个挂起的复制操作

时间:2018-12-18 09:31:02

标签: c# azure azure-storage azure-storage-blobs

我有一个服务器,该服务器获取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)

我猜是因为异步副本尚未完成...

是否可以通过在复制命令完成后执行异步删除命令来解决此问题?

任何其他解决方案都将受到欢迎。谢谢!

1 个答案:

答案 0 :(得分:0)

我建议您尝试接受{strong> CancellationToken 的StartAsyncCopy()重载。使用该重载后,您应该能够通过调用该方法时使用的 CancellationToken CancellationTokenSource 取消复制操作。

有关所有可用的重载,请参见CloudBlockBlob.StartCopyAsync Method。您还可以查看CancellationTokenSource Class,了解如何使用取消机制。

更新

如下面的评论中所述,如果操作已经开始,您还应该查看CloudBlob.AbortCopyAsync()

希望有帮助!