.Net の Rx FrameWork とは何ですか? いくつかの記事を読みましたが、概念はまだ明確ではありません。誰でも実際の例で説明できますか。
3 に答える
次のシナリオを想像してみましょう:長い一日を過ごした後、あなたとあなたの友人は、喉の渇きを癒すためにパブに入ります。必要なのは、2 杯のビールと、さまざまなトピック (map-reduce の実装、ガス価格など) について話し合うことができるテーブルだけです。
プーリング アプローチ (非 Rx) では、次の手順を実行します。
1. Ask bartender for two beers
2. While bartender pours the beer into the glasses you wait by the bar
3. When bartender gives you the beers you take them and find an available table, sit, drink and discuss
Rx アプローチを使用すると、次の手順を実行できます。
1. Ask the bartender for two beers
2. Bartender starts pouring your beers and you and your frined find an available table, sit and start discussing on various subjects
3. When bartender finishes pouring your beer, a waitress brings the beer to your table and you start drinking it.
上記は次のようにコードに変換できます。
//Non Rx approach
var beers = beerKeg.Take(2); // Here you wait for the bartender to pour the beer
foreach(var beer in beers) // Bartender handles you the beer
GrabBeer(beer);
FindAvailableTable(); // You search for an available table
foreach(var beer in beers) // You drink your beer
beer.Drink();
//Rx approach
var beers = beerKeg.Take(2)
.ToObservable()
.Subscribe(beer => beer.Drink());
// Bartender is pouring the beer but meanwhile you can search for an available table.
// The waitress will bring beer to you.
FindAvailableTable();
お役に立てれば。
PS:違いを確認するには、 LINQPadを使用します。Rx 以外のクエリを実行Dump()
し、結果を呼び出します。結果はグリッドに表示されます。Rx を使用して同じクエリを実行し、ObservableCollection
withにサブスクライブしx=>x.Dump()
ます。各要素が個別に印刷されていることがわかります。
Rx または Reactive Extensions は「イベントへの LINQ」です。IEnumerable<T>
LINQ は、反復によってシーケンスからアイテムを取得する場所に基づいています。
var items = source.Where(x => x.Name == "foobar");
foreach (var item in items)
Console.WriteLine(item);
IObservable<T>
Rx は、プッシュされた一連のイベントをサブスクライブする場所に基づいた逆です。
var events = source.Where(x => x.Name == "foobar");
events.Subscribe(item => Console.WriteLine(item));
LINQ では、foreach
ループを使用して反復を制御し、シーケンスから項目をプルします。Rx では、他の何かがイベントを発生させ、準備ができたらアイテムをプッシュします。
IObservable<T>
LINQ が多くの拡張メソッドを追加するのと同様に、Rx は多くの拡張メソッドを追加して、IEnumerable<T>
非同期イベントを処理するための非常にコンパクトで明確なコードを記述できるようにします。
Rx または Reactive Extensions は、監視可能なコレクションと LINQ スタイルのクエリ演算子を使用して、非同期およびイベント ベースのプログラムを作成するためのライブラリです。
次のような多くの記事がウェブ上で入手できます。
そして私たち自身のSO
Channel 9で初めての Rx アプリを作成するを参照してください。