我如何知道Azure文件存储共享何时被删除?

时间:2017-02-02 17:22:18

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

我尝试删除并重新创建Azure存储文件共享,以此作为删除整个内容的快捷方式。

问题是,当我尝试立即重新创建与旧的先前删除的共享同名的新共享时,它会失败(409 Conflict)错误。如果我在删除它后等待大约30秒,它可以正常工作。我认为这是因为它需要时间来释放共享名称。

这是我的代码:

var targetAccount = new CloudStorageAccount(new StorageCredentials(destination.StorageAccountName, destination.Key), true);
var targetClient = targetAccount.CreateCloudFileClient();
var targetShare = targetClient.GetShareReference(destination.ShareName);

if (targetShare.Exists()) {
    var ar = targetShare.BeginDelete(null, null);
    targetShare.EndDelete(ar);
}
Thread.Sleep(30000);
targetShare.Create();

根据MSDN上的文档,EndDelete假设在删除完成之前一直阻止,那么为什么不呢?

如何避免等待一段固定的时间才能完成删除?

(我也尝试了同步版本,但这完全相同)

更新

尝试一些不同的东西,我想看看使用此代码从BeginDelete回调的时间:

if (targetShare.Exists()) {
    Console.WriteLine($"BeginDelete {DateTime.Now:O}");
    var ar = targetShare.BeginDelete(result => {
        Console.WriteLine($"Callback {DateTime.Now:O}");
    }, null);
    targetShare.EndDelete(ar);

}

try {
    targetShare.Create();
} catch (Exception ex) {
    Console.WriteLine(ex.Message);
}

结果:

BeginDelete 2017-02-02T17:42:33.5303589+00:00
Callback 2017-02-02T17:42:33.6289211+00:00
The remote server returned an error: (409) Conflict.

1 个答案:

答案 0 :(得分:1)

按官方documentation

  

删除共享后,无法重新创建具有相同名称的共享至少30秒。在删除共享时,尝试重新创建同名共享将失败,状态代码为409(冲突),服务返回指示正在删除共享的其他错误信息。当共享被删除时,所有其他操作(包括对共享下任何文件的操作)将失败,状态代码为404(未找到)。

总之,您只能在循环中重试Create()并捕获409错误,直到成功创建共享。