【问题标题】:C# + Azure Storage blobs: StorageException: There is currently a pending copy operationC# + Azure 存储 blob:StorageException:当前有一个挂起的复制操作
【发布时间】:2018-12-18 21:12:32
【问题描述】:

我的服务器获取 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)

我猜是因为异步复制还没有完成......

这是否可以通过异步删除命令来解决,这将在复制命令完成后发生?

欢迎任何其他解决方案。谢谢!

【问题讨论】:

  • 你可以试试看backupFile.CopyState.Status?

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


【解决方案1】:

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

请参阅CloudBlockBlob.StartCopyAsync Method 了解所有可用的重载。你也可以看看CancellationTokenSource Class如何使用取消机制。

更新

正如下面评论中提到的,您还应该看看CloudBlob.AbortCopyAsync(),以防操作已经开始。

希望对你有帮助!

【讨论】:

  • 其实取消令牌只能在复制开始前取消CloudBlob.StartCopyAsync操作。如果异步复制已经在服务器端启动,您需要通过调用CloudBlob.AbortCopyAsync 方法中止复制过程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2015-10-02
  • 2014-06-17
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多