我正在尝试同时运行两个异步任务列表(具有不同的返回类型),但不太清楚该怎么做。
public void LoadPets()
{
ServiceClient service = new ServiceClient();
List<string> catNames = ...;
List<string> dogNames = ...;
List<Task<Cat>> catTasks = catNames.Select(x => service.GetCatAsync(x.Name));
List<Task<Dog>> dogTasks = dogNames.Select(x => service.GetDogAsync(x.Name));
foreach(object pet in Task.WhenAll(catTasks.Concat(dogTasks)).Result)
{
// Cast object
// Do work with object.
}
}
上面的代码不起作用,因为您无法连接不同类型的任务。但这些是从 Web 服务返回的类型。
我需要同时运行它们,因为抓猫和抓狗大约需要 3 秒。所以我最终总共等待了 6 秒,因为它们一个接一个地发生。
关于如何同时运行两个任务列表的任何见解?
最佳答案
请注意 Task<T>
实际上继承自非泛型 Task
所以你把你所有的通用任务都投给了基类,像这样:
var nonGenericTasks = catTasks
.Cast<Task>()
.Concat(dogTasks.Cast<Task>());
await Task.WhenAll(nonGenericTasks);
关于c# - 如何同时运行两个具有不同返回类型的任务列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55423552/