我想使用Task.WhenAny()
具有不同返回类型但具有共同基本类型的任务列表。我将用于Await
获取第一个就绪响应并将其从基本类型转换为我需要的任何类型。例如,一个可能是Task(of ClassDerived1)
另一个Task(of ClassDerived1)
,但我将调用 Task.WhenAny(of ClassBase)。
可以做到吗? WhenAny
据我所知,不支持协方差。
我想使用Task.WhenAny()
具有不同返回类型但具有共同基本类型的任务列表。我将用于Await
获取第一个就绪响应并将其从基本类型转换为我需要的任何类型。例如,一个可能是Task(of ClassDerived1)
另一个Task(of ClassDerived1)
,但我将调用 Task.WhenAny(of ClassBase)。
可以做到吗? WhenAny
据我所知,不支持协方差。
实际上,它是Task<T>
不支持方差的类型(因为没有ITask<T>
类型)。我遇到了同样的问题,这很烦人。
不幸的是,没有理想的解决方案。我只是从中获取平原Task
,WhenAny
然后as
将其转换为适当的类型。
从 svick 的评论更新:如果您可以让每个输入任务成为 a Task<ClassBase>
,那么您可以Task<ClassBase>
从WaitAny
.
如果你想发疯,你可以定义自己的(等待的)IMyTask<out T>
接口,将任务包装到其中,并定义自己的WaitAny
. 或者做所有的任务Task<dynamic>
。我还没有尝试过像这样疯狂的东西。:)