我正在使用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!我们有一些用户试图移动已经移动的文件!
答案 0 :(得分:-3)
您的方法是异步。我看到您正在使用 Thread.Sleep(),所以我想您有多个调用此方法的线程?但是,您应该使用async
的原因是为了减少应用程序中的线程数量。
尝试使用以下内容:
await Task.Delay(2000);
这是异步方法的Thread.Sleep()
。
希望对您有帮助!