C# 如何等待不同类型的任务?

C# 如何等待不同类型的任务?,c#,asynchronous,task,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.Ge

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

这是我的密码:

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[]
没有结果方法,我必须定义一个类似
Task[]
的类型。但是,上述四个任务中的每一个都返回不同的类型


如何等到所有任务完成后再将它们添加到组合对象并返回它?

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

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
...
task1=wtData.GetHFServiceData(wtTransfreeeId);
任务task2=wtData.GetTLServicesData(wtTransfreeeId);
...
任务[]任务=新任务[]{task1,task2,…};
Task.WaitAll(任务);
var result1=task1.Result//在此处访问单个任务的结果
...

<>避免阻塞等待,考虑使用<代码>任务。当所有 < <代码> >等待< /C> >如果你在.NET 4.5中。否则
Task.Factory.continuewhalll
是另一个选项。

谢谢,似乎可以。是否有一种内联方式来执行此操作,如
Task[]tasks=newtask[]{(Task)wtData.GetHFServiceData(wtTransfreeeId)}?我试过了,但没用。
GetHFServiceData
的返回类型是什么?您得到的错误是什么?返回类型是
Task
,错误是当我尝试使用
tasks[0]访问结果时。result
表示Task[]没有这样的方法。不,如果它们是不同的类型,您不能这样做。您必须声明单独的变量,如我所示。您应该能够将它们放入数组中,因为它们有一个公共的基类型。但是,获取
结果
属性需要特定类型。是否将
(任务[0]视为任务)。结果
?可能,我必须下一步尝试。谢谢