我正在尝试使用async / await并行运行长时间运行的任务并同时运行它们但是我无法将任务添加到任务集合并将它们添加到Task.WhenAll(),因为它立即启动运行任务。我有以下代码:
var task1 = _bll.longRunningTask1().ConfigureAwait(false);
var task2 = _bll.longRunningTask2().ConfigureAwait(false);
上述长时间运行的任务已经在此时运行,因此无法先将它们存储在集合中,然后将它们放入Task.WhenAll()然后运行它们。 这样做的正确方法是什么才能让他们进入集合并仅使用Task.WhenAll()运行它们?
List<Task> tasks = new List<Task>();
tasks.Add(task1);
tasks.Add(task2);
await Task.WhenAll(tasks);
答案 0 :(得分:3)
我试图使用async / await来......同时运行它们
您可以使用Task.WhenAll
进行异步并发。
上述长时间运行的任务已经在这一点上运行,所以不能先将它们存储在集合中,然后将它们放入Task.WhenAll()然后再运行它们。
Task.WhenAll
不会运行任务。 Task.WhenAll
仅(异步)等待多个任务完成。
这样做的正确方法是什么
这是您已有的代码:
var task1 = _bll.longRunningTask1().ConfigureAwait(false);
var task2 = _bll.longRunningTask2().ConfigureAwait(false);
await Task.WhenAll(task1, task2).ConfigureAwait(false);
这几乎等同于明确创建List<T>
:
var task1 = _bll.longRunningTask1().ConfigureAwait(false);
var task2 = _bll.longRunningTask2().ConfigureAwait(false);
List<Task> tasks = new List<Task>();
tasks.Add(task1);
tasks.Add(task2);
await Task.WhenAll(tasks).ConfigureAwait(false);
其中任何一个都可以正常工作。