問題タブ [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# - OnErrorとOnCompletedを受け取るメソッドをObservableに変換する方法
これにはおそらく本当に簡単な答えがありますが、私の脳は機能していません。
Observableを認識しないフレームワークで呼び出す必要のあるメソッドがあり、次のパターンがあります。
これを、結果を待つ同期アクションに変換する必要があります。Rxが私を助けると思ったので、私は試しました
しかし、これはここにありますが、これはデッドロックにすぎません。私はそれをObserveOnの新しいスレッドとSubscribeOnの新しいスレッドにしようとしました。しかし、それでもデッドロックが発生しています。私も正しい方向に進んでいますか?
c# - FromAsyncPattern を使用した単体テスト
Reactive Extensions には、非同期メソッドの呼び出しを簡素化するための魅力的な小さなフックがあります。
これを WPF プロジェクトで使用していますが、実行時にうまく機能します。
残念ながら、この手法を使用するメソッドを単体テストしようとすると、ランダムなエラーが発生します。このコードを含むテストの 5 回の実行ごとに ~3 回失敗します。
サンプル テストは次のとおりです (Rhino/unity 自動モック コンテナーを使用して実装)。
問題は、非同期アクションの完了時に実行するように指定したコード (この場合は Foo(x)) が呼び出されないことです。これを確認するには、Foo にブレークポイントを設定し、ブレークポイントに到達しないことを観察します。さらに、DoMethodThatInvokesService (非同期呼び出しを開始する) を呼び出した後、長い遅延を強制することができますが、コードはまだ実行されません。Rx フレームワークを呼び出すコード行が呼び出されたことは知っています。
私が試した他のこと:
ここでの提案に従って、最後から 2 番目の行を変更しようとしまし た 。
.Take(1)
次のように Rx コードに追加しました。func(inData).ObserveOnDispatcher().Take(1).Subscribe(x => Foo(x));
これにより、失敗率が 5 分の 1 程度に改善されましたが、それでも発生しました。
- 単純なジェーン非同期パターンを使用するように Rx コードを書き直しました。これは機能しますが、私の開発者のエゴは、退屈な古い開始/終了の代わりに Rx を使用したいと思っています。
最終的には回避策 (つまり、Rx を使用しない) がありますが、それは理想的ではないと感じています。誰かが過去にこの問題に遭遇し、解決策を見つけた場合は、ぜひ聞いてください.
更新:
Rx フォーラムにも投稿しましたが、今後のリリースにはテスト スケジューラが含まれる予定です。それが利用可能になったら、おそらくそれが究極の解決策になるでしょう。
c#-4.0 - ConcurrentQueue または ConcurrentStack で IObservable/IObserver を使用する方法
複数のスレッドがアイテムを入れることができるときに、複数のスレッドを使用して同時キュー内のアイテムを処理しようとしている場合、理想的な解決策は、同時データ構造で Reactive Extensions を使用することであることに気付きました。
私の元の質問は次のとおりです。
ConcurrentQueue を使用している間、並列にループしながらデキューしようとしています
したがって、項目が入れられると継続的にデキューされる LINQ (または PLINQ) クエリを持つ方法があるかどうか、私は興味があります。
n 個のプロデューサーがキューにプッシュし、限られた数のスレッドを処理できるようにこれを機能させようとしているので、データベースに過負荷をかけません。
Rx フレームワークを使用できれば、すぐに開始できると思います。100 ミリ秒以内に 100 個のアイテムが配置された場合、PLINQ クエリの一部である 20 個のスレッドがキューを介して処理されます。
私が連携しようとしている 3 つのテクノロジがあります。
- Rx フレームワーク (リアクティブ LINQ)
- プリング
- System.Collections.Concurrent 構造体
c# - リアクティブ拡張機能のメモリ使用量
Reactive Extensions for .NET を使用する WPF アプリケーションに次のコードがあります。
マウスがこのダイアログ上を移動している間、メモリは着実に増加しますか?
コードを読むと、moveEvents オブザーバブルには、しばらくすると大量の MouseEventArgs が含まれると思いますか? それとも、これは私が気付いていないスマートな方法で処理されていますか?
.net - 完全な .NET フレームワークのランタイムを使用して Silverlight コードを実行することは可能ですか?
継続的インテグレーションのために現在のシステムと統合するには、NUnit を使用して (UI 以外の) Silverlight コードをテストします。これを行うことは、ビジュアル要素や DependencyObject などの Silverlight 固有のクラスを実際に使用しない限り、通常は正常に動作する完全な .NET フレームワークのランタイムを使用して Silverlight コードを実行することを意味します。ただし、Silverlight の Reactive Extensions などの一部の汎用ライブラリも、Silverlight ランタイム (agcore) に依存しているようです。
ランタイムをだまして、Silverlight ランタイムの依存関係をそれらのモック バージョンにリダイレクトさせる方法はありますか? または、Reactive Extensions などのアセンブリ参照を実行時にまとめてリダイレクトし (単体テストのみを実行する場合)、代わりに完全な .NET フレームワークの対応する対応物をロードすることは可能ですか?
c#-4.0 - Rx フレームワークの IQueryable インターフェイスで linq 構文が機能するのはなぜですか?
私はリアクティブフレームワークを見始めました。とても素敵なもの。しかし、コード サンプルを見ていると、混乱してしまいました。linq 構文は IQueryable で機能します。linq は IEnumerable でのみ動作すると思いました。C# コンパイラは何に基づいて拡張メソッドの変換を行っていますか? 特定のインターフェースを持つ一連のメソッドが必要ですか?
c# - Reactive Frameworkストリームで中間イベントを組み合わせる方法は?
私はまだRxにかなり慣れておらず、この(一見)単純なサブスクリプションを表現する方法を理解するのに苦労しています。私はこのようなものを探しています:
- 開始:InTransaction.Where(inTransaction => inTransaction)
- 次の場合:ItemChangedまたはOn FlagChangedの場合、Changed=trueとします。
- 終了:InTransaction.Where(inTransaction =>!inTransaction)
上記のすべてが観察可能です。そのため、トランザクションの開始時に、変更通知に注意を払い始めたいと思います。通知がいくつあっても、受信されたことを覚えておきたいと思います。トランザクションが終了したら、ハンドラーを呼び出して視覚的な状態を更新したいと思います。
マウスドラッグでこれを行う方法を示す楽しい例がオンラインにたくさんあります。私が抱えている唯一の問題は、変更されたすべてのイベントを取得したくないということです。トランザクションが終了する前に、ヒットしたものがあるかどうかを知りたいだけです。
誰かが私を正しい方向に向けるのを手伝ってもらえますか?
更新:私の現在のアルゴリズムは次のようになります:
正常に動作しますが、1つのサブスクリプションで解決できるかどうか疑問に思いました。
.net - Reactive Extensions (Rx) で異なるスレッドから OnNext をトリガーするのは失礼ですか?
IObserver を自分で実装する場合、OnNext が異なるスレッドから同時または順次に呼び出される状況にどれだけうまく対処できるかはわかっていますが、これに関して、組み込みの Reactive Extension プリミティブにはどのような期待があるのでしょうか? たとえば、BufferWithTime は、複数のスレッドから呼び出される OnNext に対処できますか? 複数のスレッドから同時に呼び出されますか?
.net - Reactive Extensions ライブラリの Subject クラスの使用に関するヘルプ
サブジェクト クラスのペアを使用して、2 セットのイベント シーケンスを起動しようとしています。このアプリケーションは描画アプリケーションであり、ユーザーがクリックすると一方のサブジェクトが onNext を起動し、ユーザーがダブルクリックすると他方のサブジェクトが OnNext を起動します。上記の場合にオブザーバブルを返す GetClick および GetDoubleClick メソッドを作成しましたが、正常に動作しているようです。以下のコードの問題は、クリック シーケンスを起動する最初のサブジェクトで onNext を呼び出した場合、ダブル クリック オブザーバブルが呼び出されないことです。最初のサブジェクトの onNext 呼び出しをコメントアウトすると、ダブルクリックのオブザーバブルが期待どおりに起動されます。誰でも以下のコードとそのアイデア/考えを見てもらえますか? 以下のコードの問題行にコメントを追加しました
また、 Hide() が何をするのかよくわかりません。すべての例にemがあるように見えるので、私はそれを使用しています。身元を隠すことの本当の意味は何ですか?
c# - ソケットプログラミングに Reactive Extensions (Rx) を使用するのは実用的ですか?
GetMessages
Rx を使用して関数を記述する最も簡潔な方法は次のとおりです。
上記のサンプルのドライバーとしての単純なサーバー: http://gist.github.com/452893#file_program.cs
ソケットプログラミングに Rx を使用する場合
私が行っているいくつかのソケットプログラミング作業にReactive Extensionsを使用して調査してきました。そうする私の動機は、どういうわけかコードを「簡単」にすることです。これがコードの削減を意味するかどうか、それらの行に沿って何かをネストすることを減らすかどうか。
ただし、これまでのところそうではないようです。
- ソケットで Rx を使用する例はあまり見つかりませんでした
- 私が見つけた例は、既存
のBeginXXXX、EndXXXX コードよりも複雑ではないようです。 - FromAsyncPatternの
Observable
拡張メソッドがありますが、SocketEventArgs
これはAsync APIをカバーしていません。
現在機能していないソリューション
これが私がこれまでに持っているものです。これは機能しません。スタック オーバーフローで失敗します (heh)IObservable
指定されたバイト数を読み取る を作成できるように、セマンティクスを理解していません。