我正在使用异步任务并使用Task.WhenAll完成来检测所有文件的下载文件。但是,当All全部完成之后,才下载所有文件。
static void Main(string[] args)
{
DownloadFilesTasksAsync().GetAwaiter().GetResult();
}
static async Task DownloadFilesTasksAsync()
{
List<Task> tasks = new List<Task>();
foreach(var blobName in blobNames)
{
Task blobDownloadTask = new Task(
async () =>
{
await new AzureStorageProvider().DownloadFileFromBlob(WebUtility.UrlDecode(blobName));
Console.WriteLine($"Downloaded {blobName}");
}
);
blobDownloadTask.Start();
tasks.Add(blobDownloadTask);
}
await Task.WhenAll(tasks.ToArray());
Console.WriteLine("After When all");
}
答案 0 :(得分:1)
不要使用Task
构造函数,该构造函数接受Action
而不是Func<Task>
作为参数。如果您确实想在线程池上运行,请改用Task.Run()
。它接受Func<Task>
并适当地等待函数完成,而不是像构造函数当前正在执行的那样,以一劳永逸的方式执行。
此外,请尝试避免调用.GetResult()
,这可能会导致死锁。而是这样编写您的主要功能:
static async Task Main(string[] args) {
await DownloadFilesTasksAsync();
}