我正在尝试异步完成四个任务,当它们全部完成时,将它们附加到一个对象并返回它。
这是我的代码:
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>[]
的类型。但是,上述四个任务中的每一个都会返回不同的类型。
在将所有任务添加到我的组合对象并返回之前,我怎么能等到所有任务完成?
答案 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
是另一种选择。