从并行运行的每个任务获取完成通知

时间:2015-03-08 08:41:08

标签: c# .net parallel-processing task-parallel-library async-await

我有Task的列表。我想并行运行所有任务。我正在使用以下代码。

var tasks = new List<Task>();
foreach (var file in files)
{
    tasks.Add(file.DownloadAsync());
}
await Task.WhenAll(tasks);

但是在完成每项任务时,我需要更新UI或者需要做其他一些事情。但在这种情况下,它将等待所有任务完成。如何在完成的每项任务中实现并行运行任务和更新UI。有些任务可能需要很长时间,有些可能不会。

1 个答案:

答案 0 :(得分:4)

最简单的选择是使用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)
}));