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>
れているかのようになり、単一の結果であるオブジェクト自体を返します。T
IEnumerable<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 を意味します。