.NET Reactive Frameworkの優れた紹介[終了]


218

Microsoftのドキュメントの他に、Microsoft Reactive(Rx)フレームワークの入門とチュートリアルはありますか?

また、Reactiveが従来の非同期コーディング技術を使用して解決するのが難しいプログラミングの問題を容易にする良い例(コード付き)は何ですか?


私は探し続けます-それが何に最適に使用されるのかを理解する前に、多くの例を見る必要があります。
サムハーウェル、

4
:私は、RxのとWPFでのライブのBing検索の小さなデモ建てblog.andrei.rinea.ro/2013/06/01/...
アンドレイRînea

5
私は私のブログの一連の投稿でこの質問に正確に答えます:rehansaeed.co.uk/reactive-extensions-part1-replacing-events
Muhammad

回答:


97

更新:以下のブログ投稿は、私のオンラインブックwww.IntroToRx.comに置き換えられました。それは無料で利用できる包括的な19章の本です。あなたはそれをウェブ上で閲覧するか、あなたのkindle用のmobiバージョンをダウンロードすることができます。わずかな料金(〜99c / 77p)でアマゾンから直接入手することもできます。この本があなたのニーズや期待を満たしていない場合は、私(著者)に知らせてください。

ホット/コールドポストへのリンクをありがとう。これは全シリーズの一部にすぎませんが、

  1. Rxの概要
  2. 静的メソッドと拡張メソッド
  3. ライフタイム管理–完了および登録解除
  4. フロー制御
  5. 複数のIObservableストリームを組み合わせる
  6. スケジューリングとスレッド化
  7. 高温と低温の観測量
  8. Rxのテスト
  9. バッファ、ウィンドウ、結合、グループ結合

私はこのブログをRxの紹介的なもので更新し続けます。

より高度なものについては、Rxフォーラム(MSDN)にアクセスしてください。


7
すべての学習教材がビデオ形式であるため、私はRxについて学びながら足を引きずっています。このテキストベースのリソースを提供するための+1。
Daniel Schilling 2014年

このリンクが無効であることを列挙します。
Maslow

2
ロングライブこのリンクを列挙
フルタイムのスケルトン

1
私はジェームズ(EnumerateThis)と一緒に仕事をしていますが、彼は何年もそれに触れていません。彼にはそれを復活させる時間も食欲もないようです
リーキャンベル

85

これは、.NET Rxフレームワークのさまざまな機能の使用方法を示す多数のコード例が含まれたWikiサイトです。http//rxwiki.wikidot.com/101samples

私はこれがそこにある最も包括的なサイトであり、最初に始めるのが最も速いサイトだとわかりました。


12
私が知る限り、このwikiは、どの参照を含めるかを伝えるだけではありません。どちらかといえば...イライラします。
ジョージマウアー

ummはdllを追加してオブジェクトエクスプローラーを開き、クラスを検索します。もちろん、Visual Studioの右クリックコンテキストメニューも役立ちます
Joe

62

5
+1これらのビデオを強くお勧めします。LOTを学び、IQueryableとIQbservableに関するBart De Smetのビデオもいくつかチェックしてください。Rxの内部をよりよく理解できます。
ギデオン'14年

1
「DevCamp 2010基調講演」ビデオの完全なサンプルプロジェクトはこちらです:bartdesmet.net/download/Rx40Samples.zip
Omer Raviv

16

以下は、リアクティブプログラミングで簡単にできることの例ですが、古典的なイベントでは(困難でない場合は)乱雑で、マウスボタンが押されている間に線を描画します。読み取り可能であり、明示的な状態処理はありません。

var pen = new Pen(Color.Red, 3);
var graphics = this.CreateGraphics();

var mouseMoveWhileDown = 
    from md in this.GetMouseDown()
    from mv in this.GetMouseMove().Until(this.GetMouseUp())
    select new Point(mv.X, mv.Y);

mouseMoveWhileDown
    .Pairwise()
    .Subscribe(tup => graphics.DrawLine(pen, tup.Item1, tup.Item2)); 

(その例では、Pairwise()は自家製です...)

IObservableの最も重要なことは、IEnumerableと同じように「合成可能」であることです。

私は別の答えで言及されたビデオを完全に推薦します。実際、Channel9のテーマに関するいくつかの異なるビデオがあります。


.Untilが、私はそれを使用することはできません、どこから来るのか、私は参照が欠落しなければなりません
TimothyP

1
@TimothyP、私はそれが古いバージョンへの後戻りになるかもしれないと思う。それか自分で書いた(当時、IObservable拡張メソッドの実装を試していた)。私の知る限りでは、最新バージョンのリアクティブ拡張機能にはと呼ばれるメソッドTakeUntilがあります。
Benjol

これはRxの精神を示す素晴らしい例です。ありがとう。
ダン・アブラモフ、2011

Pairwise()の実装を共有できますか?
ブラスター2013

1
@blaster、この実装はどうですか:var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y))
MisterMetaphor 2014




4

奇妙なことに、Reactive Extensions ホームページは12のビデオやブログにリンクしていますが、包括的な公式リファレンスドキュメントへのリンクを忘れています。それは悲しいことです。もしあなたがチームを知っているなら、彼らに彼らのウェブサイトを修正するように頼んでください!


3

Rx Sandboxで遊んで、さまざまなコンビネーターの意味を非常に直感的に把握してください。これは私が見た中で最高の学習ツールです。



2

2番目の質問に答えるために、Rxから多くの利益を得ることができる問題を次に示します。それは「すぐに金持ちになる」と呼ばれています。

同じ名前のゲームを開発しましたが、かなり売れています。ただし、卸売りは店舗でのみ可能です。現金処理を簡単にするために、手前に流れるコンベヤーベルトがあります。

(上記のストーリーを自由に変更してください:))

営業担当者はそれに束縛された現金の札を置き、札の中の紙幣の量と種類を示すラベルはありません。あなたの仕事はお金を分類して数えることです。後で、より多くのお金を得るとき、あなたはあなたを助けるために他を雇うことができます。

この場合、ソースは札束の非同期ソースです(プロデューサー)。従業員とサプライヤはお金を期待していますが、札束を消費し、それらを開梱し、カスタムビジネスロジックを使用して、必要に応じて再パッケージして支払う必要があります。

営業担当者は独自のスレッドで実行しているので、あなたがベルトに何を投げるか数えるのを待つ必要はありません。あなたが他の仕事をすることができるまで、より多くのお金が数えることができるとき告げられるならば、あなたの時間は最もよく利用されます。

あなたは、バイトごとにそれぞれの札束を表すことができます[]。

これはかなり一般的な現実の状況です。ネットワーク上のリソース[検索エンジン、画像、動画などのウェブページ]や周辺機器からのデータを取得すると、バイトのチャンク(ヘッダー付きの場合もある)で取得されます。シングルスレッド、または操作が困難なマルチスレッド環境では、それらを集約して処理する傾向があります。もう違います!!


これは、同じIObserver <T>でOnNextを呼び出し、次にコンシューマーがサブスクライブしているプロデューサー(販売担当者)の一部ですが、生成されている場所(OnNext)とは別のスレッドで監視していることを確認します。
リーキャンベル



1

Andreas Hoffmannのリンクに加えて(Rxを学習していたときに非常に役立ちました)

Bart De Smetの一部を紹介します(物事を非常によく説明する非常に賢い人)ビデオ:

Rxの概要:
Rx-非同期プログラミングブルースの修復

いくつかの悲惨な内部+いくつかの哲学、これらのビデオは本当に啓発的です:
Min LINQ-LINQの本質
(上記のビデオは、LINQがRxのような他のものとどのように関連しているかを扱います)

IQbservableの観察-IQueryableのデュアル



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.