从每个任务 运行 并行获取完成通知
Get Completed notification from each task running in parallel
我有一个 Task
的列表。我想 运行 并行执行所有任务。我正在使用以下代码进行操作。
var tasks = new List<Task>();
foreach (var file in files)
{
tasks.Add(file.DownloadAsync());
}
await Task.WhenAll(tasks);
但是每次任务完成后我都需要更新 UI 或者需要做一些其他的事情。但在这种情况下,它将等待所有任务完成。我怎样才能实现任务的并行 运行ning 和更新 UI 对每个完成的任务。有些任务可能需要很长时间,有些可能不需要。
最简单的选择是使用 async
方法:
async Task DownloadAndUpdate(File file)
{
await file.DownloadAsync();
UpdateUI(file)
}
并等待这些任务:
await Task.WhenAll(files.Select(file => DownloadAndUpdate(file)));
如果方法太多,您也可以使用单个 lambda 表达式来实现:
await Task.WhenAll(files.Select(async file =>
{
await file.DownloadAsync();
UpdateUI(file)
}));
我有一个 Task
的列表。我想 运行 并行执行所有任务。我正在使用以下代码进行操作。
var tasks = new List<Task>();
foreach (var file in files)
{
tasks.Add(file.DownloadAsync());
}
await Task.WhenAll(tasks);
但是每次任务完成后我都需要更新 UI 或者需要做一些其他的事情。但在这种情况下,它将等待所有任务完成。我怎样才能实现任务的并行 运行ning 和更新 UI 对每个完成的任务。有些任务可能需要很长时间,有些可能不需要。
最简单的选择是使用 async
方法:
async Task DownloadAndUpdate(File file)
{
await file.DownloadAsync();
UpdateUI(file)
}
并等待这些任务:
await Task.WhenAll(files.Select(file => DownloadAndUpdate(file)));
如果方法太多,您也可以使用单个 lambda 表达式来实现:
await Task.WhenAll(files.Select(async file =>
{
await file.DownloadAsync();
UpdateUI(file)
}));