1

.Net の Rx FrameWork とは何ですか? いくつかの記事を読みましたが、概念はまだ明確ではありません。誰でも実際の例で説明できますか。

4

3 に答える 3

9

次のシナリオを想像してみましょう:長い一日を過ごした後、あなたとあなたの友人は、喉の渇きを癒すためにパブに入ります。必要なのは、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 を使用して同じクエリを実行し、ObservableCollectionwithにサブスクライブしx=>x.Dump()ます。各要素が個別に印刷されていることがわかります。

于 2012-05-30T07:39:19.117 に答える
5

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>非同期イベントを処理するための非常にコンパクトで明確なコードを記述できるようにします。

于 2012-05-30T07:32:34.470 に答える
2

Rx または Reactive Extensions は、監視可能なコレクションと LINQ スタイルのクエリ演算子を使用して、非同期およびイベント ベースのプログラムを作成するためのライブラリです。

次のような多くの記事がウェブ上で入手できます。

MSDN

Rxウィキ

ビジュアル スタジオ マガジン

Somasegar のブログエントリ

Rx API の詳細なイントロ

そして私たち自身のSO

Channel 9で初めての Rx アプリを作成するを参照してください。

Channel 9 の Rx Extensions for .NET の概要

于 2012-05-30T07:17:12.370 に答える