如何将任务添加到C#任务中并等待所有任务完成

  • 本文关键字:任务 等待 添加 c#
  • 更新时间 :
  • 英文 :


我刚开始接触C#的线程任务。我希望每当我点击按钮时,我都会添加一个任务,然后等待所有任务完成后再继续下一步。

我的代码如下:

List<Task> SingleTaskList = new List<Task>();
private void Add_Click(object sender, RoutedEventArgs e)
{
Task t = Task.Factory.StartNew(() => { Dosomething();});

SingleTaskList.Add(Task.Factory.StartNew(() => { Dosomething(); }));
Task.Factory.ContinueWhenAll(SingleTaskList.ToArray(), tArray =>
{
Dispatcher.Invoke(() =>
{
//Update the UI
});
});
}

但我发现,当任何一项任务完成后,就会采取下一步行动。

我应该如何修改此代码?

你可以像这样使用Task.WhenAll:

await Task.WhenAll(SingleTaskList.ToArray());
Dispatcher.Invoke(() =>
{
//Update the UI
});

仅供参考:为了在那里使用wait,您的方法需要标记为async,或者您需要用上面的语句调度一个新的async任务。

您的代码有很多问题,由于它看起来根本崩溃了,我只回答您的实际问题:如何等待多个任务,然后在UI线程上做一些事情。

您想要使用awaitTask.WhenAll(),因此需要将函数标记为async。你想要这样的东西:

private async void Add_Click(object sender, RoutedEventArgs e)
{
// fill SingleTaskList with whatever
await Task.WhenAll(SingleTaskList);
// update your UI here
// you're back on the GUI thread so no need for Dispatcher.Invoke
}