gpt4 book ai didi

c# - 等待具有多态结果的异步任务列表

转载 作者:行者123 更新时间:2023-12-02 07:59:31 26 4
gpt4 key购买 nike

我需要解决的问题是有不同的调用返回任务,但它们可能包含也可能不包含基类或某些派生类,然后在继续之前等待所有这些调用。

以下无效代码说明了问题:

class Base {

}

class Derived : Base {

}

public void Main() {
List<Task<Base>> taskList = new List<Task<Base>>();

for ( var i = 1; i < 10; i++) {
switch (i%2) {
case 0:
taskList.Add(GetDerivedAsync());
break;
default:
taskList.Add(GetBaseAsync());
break;
}
}

Task.WhenAll(taskList);
}

上面的代码不起作用,因为你不能添加 Task<Derived>Task<Base> 的列表.

我如何进行一堆异步调用,其返回的对象本质上是多态的,将它们添加到列表中,然后在继续代码之前等待所有这些调用?

最佳答案

我想你必须转换 GetDerivedAsync() 的结果来自 Task<Derived>Task<Base>为了让他们进入同一个列表。

public Task<Base> GetBaseTaskFromDerived(Task<Derived> derivedTask)
{
return await derivedTask;
}

然后像这样添加:taskList.Add(GetBaseTaskFromDerived(GetDerivedAsync()));

关于c# - 等待具有多态结果的异步任务列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59289669/

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