Я пытаюсь удалить и воссоздать общий ресурс файла Azure как быстрый способ удалить все содержимое.Как узнать, когда общий ресурс хранилища 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
, предполагают, чтобы блокировать до удаления была завершена, так почему же не так ли?
Как я могу избежать необходимости ждать фиксированного количества времени для завершения удаления?
(Я также попытался синхронную версию этого, как хорошо, но это делает то же самое)
UPDATE
Попытка несколько различных вещей, я хотел бы видеть тайминги на обратный вызов от 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] (https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.file.cloudfileshare.enddelete.aspx), похоже, предполагает это. – DavidG
Нет, он возвращает результат процесса удаления. – BG100
Нет, это не так, это асинхронный результат. Для операции [BeginDelete] (https://msdn.microsoft.com/en-us/library/dn723503.aspx) первым параметром является обратный вызов, чтобы сообщить вам, когда он будет завершен. – DavidG