0

Task.WhenAny()戻り値の型は異なるが基本型は共通のタスクのリストで使用したいと考えています。Await最初の準備完了の応答を取得し、それを基本型から必要な型にキャストするために使用します。たとえば、一方が他方である可能性がTask(of ClassDerived1)ありTask(of ClassDerived1)ますが、Task.WhenAny(of ClassBase) を呼び出します。

それはできますか? WhenAny私が知る限り、共分散はサポートされていません。

4

1 に答える 1

1

実際には、Task<T>分散をサポートしないタイプです(タイプがないためITask<T>)。私はこれと同じ問題に遭遇しました、そしてそれかなり厄介です。

残念ながら、理想的な解決策はありません。プレーンTaskを取り出して、適切なタイプにキャストしますWhenAnyas

svickのコメントからの更新:すべての入力タスクを、にできる場合は、からをTask<ClassBase>取得できます。Task<ClassBase>WaitAny

夢中になりたい場合は、独自の(待機可能な)IMyTask<out T>インターフェイスを定義し、タスクをそのインターフェイスにラップして、独自のインターフェイスを定義できますWaitAny。または、すべてのタスクを作成しTask<dynamic>ます。私はこのようなクレイジーなものを試したことがありません。:)

于 2012-09-15T00:37:10.063 に答える