等待不同类型的任务

时间:2017-05-16 12:43:50

标签: c# async-await

IEnumerable<Task<Request>> requestTasks = CreateRequestTasks();
Task<Trace> traceTask = CreateTraceTask();

var tasks = new List<Task>();
tasks.AddRange(requestTasks);
tasks.Add(traceTask);

await Task.WhenAll(tasks);

如何从requestTasks集合中获取结果?

2 个答案:

答案 0 :(得分:7)

  

如何从requestTasks集合中获取结果?

将其保存为单独的(具体化的)集合:

List<Task<Request>> requestTasks = CreateRequestTasks().ToList();
...
await Task.WhenAll(tasks);
var results = await Task.WhenAll(requestTasks);

请注意,第二个await Task.WhenAll实际上不会执行任何&#34;异步等待&#34;,因为所有这些任务都已完成。

答案 1 :(得分:0)

由于你必须等待所有人,你可以简单地写

IEnumerable<Task<Request>> requestTasks = CreateRequestTasks();
Task<Trace> traceTask = CreateTraceTask();

var tasks = await Task.WhenAll(requestTasks);
var trace = await traceTask;

在同等async区块内:它可能看起来更清晰。

另请注意,上述traceTask在创建时开始(实际上这是same answer,因为问题本身是重复的。)