問題タブ [system.reactive]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Rx を使用して Twitter 検索を非同期的にクエリする方法は?
特定のキーワードで Twitter 検索 API を非同期的にクエリするために、Rx (Reactive Framework) を使用することを考えています。作成したいサンプル アプリは、新しいツイートをコンソールに表示できる必要があります。
それが可能だと思いますか?標準のプログラミング手法を使用するよりも簡単でしょうか?
どうやってそれをしますか?
ありがとう!ジェレミー
.net - IObservable のしくみ.Average は動作するはずですか?
アップデート
Jon Skeet が正しかったようです (大きな驚きです!)。問題は、Average
拡張機能が継続的な平均を提供するという私の仮定にありました (そうではありません)。
私が求めている動作のために、単純なContinuousAverage
拡張メソッドを作成しました。その実装は、同様のことを望む他の人のためにここに含めています。
私は先に進んで、他の明白な候補についても上記のようなことをすることを考えContinuousCount
ています. それについて何か考えはありますか?ContinuousSum
ContinuousMin
ContinuousMax
ContinuousVariance
ContinuousStandardDeviation
元の質問
私はRx Extensionsをあちこちで少し使用していますが、基本的な考え方は理解できたと感じています。
ここで奇妙なことがあります。これを書いた場合、次のような印象を受けました。
IObservable<double>
2 つのオブジェクト (bids
とavgOfBids
)を取得します。1 つは基本的に私の からのすべての市場入札のストリームであり、もう 1 つはこれらの入札の平均MarketDataProvider
のストリームです。
だから、このようなもの:
私のavgOfBids
オブジェクトは何もしていないようです。私は何が欠けていますか?私はおそらくAverage
実際に何をすべきかを誤解していると思います。IObservable<T>
(これは、Max
、などのすべての集約のような拡張メソッドにも当てはまるようですCount
。)
c# - シーケンスを再評価せずに IObservable の前の要素を取得する
シーケンス (Reactive Extensions for .NET) で、IObservable
以前の要素と現在の要素の値を取得して、それらを比較できるようにしたいと考えています。以下のようなタスクを実行する例をオンラインで見つけました。
シーケンスを2回評価することを除いて、うまく機能しますが、これは避けたいと思います。次のコードで 2 回評価されていることがわかります。
出力には、シーケンス内の要素の 2 倍のデバッグ行が表示されます。
なぜこれが起こるのか理解していますが、これまでのところ、シーケンスを 2 回評価しない代替手段は見つかりませんでした。以前と現在を 1 つのシーケンス評価だけで組み合わせるにはどうすればよいですか?
.net - Reactive Extensions(Rx)を使用したRESTクライアントAPIの作成
Reactive Extensions(Rx)の適切なユースケースに頭を悩ませようとしています。引き続き発生する例は、UIイベント(ドラッグアンドドロップ、描画)、およびRxがWebサービス呼び出しなどの非同期アプリケーション/操作に適しているという提案です。
私は、RESTサービス用の小さなクライアントAPIを作成する必要があるアプリケーションに取り組んでいます。4つのRESTエンドポイントを呼び出す必要があります。3つは参照データ(空港、航空会社、ステータス)を取得するためのもので、4つ目は特定の空港の飛行時間を提供するメインサービスです。
3つの参照データサービスを公開するクラスを作成しました。メソッドは次のようになります。
GetFlightsメソッドでは、各フライトに、出発する空港とフライトを運用している航空会社の参照を保持する必要があります。そのためには、GetAirportsとGetAirlinesからのデータを利用できるようにする必要があります。各空港、航空会社、ステータスは辞書(つまり辞書)に追加されるので、各フライトを解析するときに参照を簡単に設定できます。
私の現在の実装は次のようになります。
現在の実装はSergeyの回答に基づいており、ForkJoinを使用してシーケンシャル実行を保証し、Flightsの前に参照データがロードされるようにします。この実装は、以前の実装のように「ReferenceDataLoaded」イベントを発生させるよりもはるかに洗練されています。
.net - RxのIConnectableObservables
誰かがObservableとConnectableObservableの違いを説明できますか?Rx Extensionsのドキュメントは非常にまばらで、ConnectableObservableがどのような場合に役立つのかわかりません。
このクラスは、Replay/Pruneメソッドで使用されます。
java - Java のリアクティブ拡張機能
Java のReactive Extensions (.NET) に相当するものはありますか?
Rx (リアクティブ拡張機能) について
Rx は、監視可能なコレクションを使用して、非同期およびイベント ベースのプログラムを作成するためのライブラリです。
JBOSS のDroolsなどのルール エンジンは知っていますが、Microsoft .NET のアプローチに近い方法は他にありますか?
c# - Rxの実際の例
重複の可能性:
リアクティブエクステンションの使用の良い例
私はしばらくの間ReactiveExtensionをいじっていますが、ほとんどの場合、WPFフロントエンド内でのユーザー主導のイベントの処理/作成に限定されています。
これは、非同期プログラミングを行うための非常に強力で新しい方法です。他の人がそれを使って何をしているのか知りたいのですが、現在のやり方をどこで改善できると思いますか?
.net - IObservable を取得するにはどうすればよいですか「非標準」イベントからのRxで?
これが私の言いたいことです。イベントを公開する API を使用しているとしますが、これらのイベントは標準EventHandler
またはEventHandler<TEventArgs>
署名に従っていません。たとえば、1 つのイベントは次のようになります。
IObservable<TEventArgs>
通常、イベントからを取得したい場合は、次のようにします。
しかし、これは機能しません。なぜなら、Update
イベントはEventHandler<UpdateEventArgs>
、実際にはありませんUpdateEventArgs
。基本的には、それ自体が独自のものであるからです。
明らかに、(つまり)から派生する独自のクラスを定義し、イベントを提供するオブジェクトをラップする別のクラスを作成し、ラッパー クラスに である独自のイベントを与え、そのからを取得することができます。しかし、それは面倒な作業量です。EventArgs
UpdateEventArgs
Update
Update
EventHandler<UpdateEventArgs>
IObservable<UpdateEventArgs>
IObservable<[something]>
このような「非標準」イベントから作成する方法はありますか、それとも運が悪いのでしょうか?
更新:Jon Skeet の回答から、次のオーバーロードの方向に突き進んでいますObservable.FromEvent
:
Func(Of EventHandler(Of TEventArgs), TDelegate)
ただし、その部分について頭を悩ませていることは認めざるを得ません。私には逆に見えます(?)。明らかに、私には欠けているものがあります...
とにかく、それが役立つ場合、これは同等の C# コードがどのように見えるかだと思います (私は完全に正直に言うと、これについてはよくわかりません。私は一般的に C# を好みますが、このコードは 1 つの作業です私の同僚は主に VB.NET で書いており、VB.NET ではイベントを宣言するための複数の構文が許可されています):
ここで注意が必要なのは、なんらかのクラスから派生する必要があるように見えることEventArgs
です。私が使用している API には、そのようなクラスはありません。だから、最低限、私はそれを書く必要があります。しかし、それはかなり些細なことです (基本的に 1 つのプロパティ: BaseEvent
)。
最終的に、このオーバーロードに必要なコードは C# では次のようになると思います。
まず第一に、私はこれをまっすぐに持っていますか?第二に、VB 9 を使用すると、独自のメソッドを作成せずに上記を達成する方法は本当にないというのは正しいですか?
そもそも、まったく間違った角度からこの問題に取り組んでいるような気がします。しかし、私は本当によくわかりません。
c# - System.Interactive:Memoize()とMemoizeAll()の違い?
Reactive Extensions の System.Interactive.dll (v1.0.2521.0) には、メソッドとメソッドのEnumerableEx
両方があります。API ドキュメントは、どちらも同じです。Memoize
MemoizeAll
元の列挙型を 1 回だけ列挙し、その結果をキャッシュする列挙型を作成します。
ただし、これらの方法は明らかに同一ではありません。を使用するMemoize
と、最初に列挙したときに列挙型に値があり、2 回目には空のように見えます。使用するMemoizeAll
と、どちらのメソッドの説明からも期待できる動作が得られます。結果を何度でも列挙して、毎回同じ結果を得ることができますが、ソースは 1 回しか列挙されません。
これらの方法の意図的な違いは何ですか? ユースケースはMemoize
何ですか?ドキュメントが非常に紛らわしいため、かなり役に立たない方法のようです。
c# - Rx を使用して非同期イベントを同期する
Reactive Extensions for .NET (Rx)を有効に活用したいと考えており、いくつかの基本的なタスクを実行するための情報を得たいと考えています。私がやろうとしていることを説明するために、非同期イベントを持つ外部コンポーネントがある不自然な例があります:
コンポーネントは、 を呼び出すことによって開始されBeginStart()
ます。このメソッドはすぐに戻り、後でコンポーネントの起動が完了すると、Started
イベントが発生します。
Started
コンポーネントをラップして同期開始メソッドを作成し、イベントが発生するまで待機したいと考えています。これは私がこれまでに思いついたものです:
を取り除きたいのですがManualResetEvent
、Rx に解決策があることを期待しています。しかし、どのように?