gpt4 book ai didi

c# - 如何同时运行两个具有不同返回类型的任务列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:42 25 4
gpt4 key购买 nike

我正在尝试同时运行两个异步任务列表(具有不同的返回类型),但不太清楚该怎么做。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com