Task<T>.ContinueWithの基本的な概念は と同じIObservable<T>.Subscribeです。それらは、Reactive Extension が変換拡張メソッドを提供するのに十分に似ています。は BCL の一部であるためIObservable<T>、実装しない理由はありませんIObservable<T>。Task<T>では、実装しない理由は何IObservable<T>ですか?
4 に答える
推測しかできませんが、いくつかの正当な理由があると思います。
Task<T>IObservable<T>実際には同じ基本的な概念を持っていません。はい、どちらも非同期ですが、すべての共通点はほぼこれで終わりです。2 つの大きな違いは、Task<T>常に 1 つの値をIObservable<T>持ち、必要な数の値 (またはゼロを含む) を持つことができることです。Task<T>実装されている場合は、すべての .Net が実装さIObservable<T>れているかのようになり、単一の結果であるオブジェクト自体を返します。TIEnumerable<T>Task<T>に変換するのは簡単IObservable<T>です。RxのToObservable()拡張メソッドを使用するか、自分で作成します。これにより、必要なものがはるかに少なくなります。
MSFT の Stephen Toub (*) の次の言葉を引用することが適切であることを願っています。
ParallelExtensionsExtras ツアー - #2 - Task.ToObservable MSDN ブログ記事:
結局のところ、 whileは現在実装
Task<TResult>していませんが、実際には実装するのに非常に適しています。オブザーバブルは、ストリームの終わりまたは例外によって終了する任意の数の値を表します。Aはこの説明に適合します。単一の値または例外で完了します。.NET Framework の将来のバージョンでimplementが見られる可能性はありますが、これを;の拡張メソッドとして実装することで、適切な動作を得ることができます。実際、Rxにはそのような拡張メソッドが含まれています。IObservable<T>Task<TResult>Task<TResult>IObservable<T>Task<TResult>ParallelExtensionsExtras
(*) "FT" が何を意味するのかはわかりませんが、MSFT は NASDAQ 株式記号で MS を意味しますが、"MSFT" の "MS" は確かに Microsoft を意味します。