2017-09-06 3 views
1

現在、私は結果のIListを返すNHibernateでデータベースselectを発行しています。次に、リストにIList.ToObservableを使用して、私が購読できるObservableを取得します。リストをObservableに変換するのではなく、どうすれば反応的なパラダイムに書くことができますか?C#でリアクティブエクステンションを使用して、同期ポーリングデータベースクエリを非同期プッシュにする方法を教えてください。

+0

[ask]をお読みください。 – Enigmativity

+0

使い捨てリソースで観測値を返す方法は、 'Observable.Using'を見てください。 – Enigmativity

+0

私の質問に何が欠けているのか分かりません。私は喜んでそれを明確にすると思うものでそれを更新します。 – Chip

答えて

3

Reactive Extensions を使用してデータベース呼び出しを行う最善の方法は、まったくそれを行うものではありません。

脇の下の1ライナーを除いて、これは深刻なポイントです。手掛かりは疑問です... IOバインドをと呼んでいるので、あなたは本当に非同期プル状態です。

C#8(IAsyncEnumerable - which already has placeholders in the Rx github repo)では、このためのファーストクラスの言語サポートが用意されています。

しかし、プロンプトの応答を期待している呼び出しを開始したときに、Observableとして同期呼び出し応答を公開することは本当にありません。観察可能なデータは、データが出現するかどうかわからないときのプッシュシナリオ用です。クエリを非同期にして、伝統的に結果が得られるようにすることができます。

Rxで非同期DBクエリが頻繁に表示されるのは、UIのキー押下などの適切な観測可能イベントに由来する観測可能なチェーンの一部です。 keypressイベントはObservableに供給され、Observableはasyncクエリに投影され、UIにポップされます。 The example hereには、非同期DBクエリと同じように簡単なサービスコールがあります。重要な部分は、getSuggestions非同期calの使用と、それが観測可能なクエリにどのように組み込まれているかです。

この状況でも、サービス呼び出し自体はObservableを直接返さない非同期プルです。それは他の観察された事象によって開始されている。

+0

データベースへの非ブロッキング非同期呼び出しを使用し、結果が来るとサブスクライブするので、これは間違いなく良い方法です。したがってプッシュをプッシュに変えます。 Observable.FromAsyncは欠けていたキーパターンです! – Chip

関連する問題