如何等待各种类型的任务?

时间:2014-09-26 19:16:50

标签: c# asynchronous task

我正在尝试异步完成四个任务,当它们全部完成时,将它们附加到一个对象并返回它。

这是我的代码:

Task[] tasks = new Task[4];
tasks[0] = wtData.GetHFServiceData(wtTransfreeeId);
tasks[1] = wtData.GetTLServicesData(wtTransfreeeId);
tasks[2] = wtData.GetHMAServiceData(wtTransfreeeId);
tasks[3] = wtData.GetHSServiceData(wtTransfreeeId);

Task.WaitAll(tasks);

问题是,由于Task[]没有Result方法,我必须定义类似Task<MyType>[]的类型。但是,上述四个任务中的每一个都会返回不同的类型。

在将所有任务添加到我的组合对象并返回之前,我怎么能等到所有任务完成?

1 个答案:

答案 0 :(得分:6)

在将它们放入数组之前,您必须将它们存储为Task<T>

Task<YourType1> task1 = wtData.GetHFServiceData(wtTransfreeeId);
Task<YourType2> task2 = wtData.GetTLServicesData(wtTransfreeeId);
...
Task[] tasks = new Task[]{task1, task2, ...};
Task.WaitAll(tasks);

var result1 = task1.Result;//Access the individual task's Result here
...

避免阻止等待,如果您使用的是Task.WhenAll,请考虑使用await。{4.5}。否则Task.Factory.ContinueWhenAll是另一种选择。