2012-09-14 55 views
0

我想使用Task.WhenAny()以及具有不同返回類型但具有公共基類型的任務列表。我將使用Await獲得第一個就緒響應,並將其從基本類型轉換爲我需要的任何類型。例如,其中一個可能是Task(of ClassDerived1),另一個可能是Task(of ClassDerived1),但我會調用Task.WhenAny(ClassBase的)。如何在VB.Net中使用WhenAny與多種類型?

可以這樣做嗎?據我所知,WhenAny不支持協方差。

回答

1

實際上,它是不支持差異的Task<T>類型(因爲沒有ITask<T>類型)。我遇到了同樣的問題,它相當討厭。

不幸的是,沒有一個理想的解決方案。我只是從,然後as - 播放到適當的類型。從svick的評論

更新:如果你能得到每個輸入任務是Task<ClassBase>,那麼你就可以得到一個Task<ClassBase>WaitAny

如果你想瘋了,你可以定義你自己的(可等值的)IMyTask<out T>界面,將任務包裝進去,並定義你自己的WaitAny。或者完成所有任務Task<dynamic>。我沒有嘗試過這樣瘋狂的東西。 :)

+0

如果您完成任務'任務''不會更容易嗎? – svick

+0

是的!我想我需要更多的睡眠... –