0

我想使用Task.WhenAny()具有不同返回类型但具有共同基本类型的任务列表。我将用于Await获取第一个就绪响应并将其从基本类型转换为我需要的任何类型。例如,一个可能是Task(of ClassDerived1)另一个Task(of ClassDerived1),但我将调用 Task.WhenAny(of ClassBase)。

可以做到吗? WhenAny据我所知,不支持协方差。

4

1 回答 1

1

实际上,它是Task<T>不支持方差的类型(因为没有ITask<T>类型)。我遇到了同样的问题,这烦人。

不幸的是,没有理想的解决方案。我只是从中获取平原TaskWhenAny然后as将其转换为适当的类型。

从 svick 的评论更新:如果您可以让每个输入任务成为 a Task<ClassBase>,那么您可以Task<ClassBase>WaitAny.

如果你想发疯,你可以定义自己的(等待的)IMyTask<out T>接口,将任务包装到其中,并定义自己的WaitAny. 或者做所有的任务Task<dynamic>。我还没有尝试过像这样疯狂的东西。:)

于 2012-09-15T00:37:10.063 回答