我有Task
的列表。我想并行运行所有任务。我正在使用以下代码。
var tasks = new List<Task>();
foreach (var file in files)
{
tasks.Add(file.DownloadAsync());
}
await Task.WhenAll(tasks);
但是在完成每项任务时,我需要更新UI或者需要做其他一些事情。但在这种情况下,它将等待所有任务完成。如何在完成的每项任务中实现并行运行任务和更新UI。有些任务可能需要很长时间,有些可能不会。
答案 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)
}));