【发布时间】:2017-06-19 21:28:47
【问题描述】:
我正在尝试删除并重新创建 Azure 存储文件共享,以便快速删除全部内容。
问题是,当我尝试立即重新创建与以前删除的旧共享同名的新共享时,它会失败(出现 409 冲突)错误。如果我在删除它后等待大约 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.
【问题讨论】:
-
EndDelete不会停止删除过程吗? docs 似乎暗示了这一点。 -
不,它返回删除过程的结果。
-
不,不是,这是异步结果。对于BeginDelete 操作,第一个参数是一个回调,告诉您何时完成。
-
对不起,我在想我也试过的 DeleteIfExists()。但是 EndDelete 并没有中止删除......文档有点模糊,但它只是假设在进程完成之前阻塞,与 BeginInvoke/EndInvoke 相同
-
那么为什么不将回调传递给
BeginDelete?
标签: c# azure azure-storage azure-storage-files