Я работаю с хранилищем Azure.Перемещение файла во вторичное хранилище, как только оно становится доступным в первичном хранилище, и файл обычно доступен через 3-5 секунд.Я вижу, что он был перемещен во вторичное хранилище, но цикл while продолжал выполняться до тех пор, пока он не был уничтожен во время ночного развертывания после выполнения 7000 раз.
public async Task<File> ProcessArchive()
{
CloudBlockBlob sourceBlob = sourceContainer
.GetBlockBlobReference(video);
bool exists = sourceBlob.Exists();
while (!exists)
{
await _logServices.Log(
"Condition Triggered",
"ProcessArchive",
new
{
ArchiveId = archiveId
});
Thread.Sleep(2000);
exists = sourceBlob.Exists();
}
Console.WriteLine("Moving operation code!");
}
Разве это не значит ждать цикла whileвозвращает false и затем выполняет последнюю строку?
Обновление: хотя цикл все еще прерывается, теперь единственное отличие состоит в том, что его убивают через 2 минуты после обновления кода.
CloudBlockBlob sourceBlob = sourceContainer.GetBlockBlobReference(video);
bool exists = await sourceBlob.ExistsAsync();
// Emergency bail-out
CancellationTokenSource source = new CancellationTokenSource(TimeSpan.FromMinutes(2));
while (!exists)
{
await _logServices.Log(
LogCategory.Audit,
"Condition Triggered",
"ProcessArchive",
new
{
ArchiveId = archiveId
});
await Task.Delay(2000);
sourceBlob = sourceContainer
.GetBlockBlobReference(video);
exists = await sourceBlob.ExistsAsync();
if (source.IsCancellationRequested) break;
}
Console.WriteLine("Rest of the code which is another 50 lines.");
Обновление: Jeez!У нас есть пользователи, пытающиеся переместить уже перемещенный файл!