このために、各 Rx オブザーバブル サブスクリプションが連続して機能することを認識することは非常に役立ちます。つまり、1 つのオブザーバブルの 1 つのサブスクリプションの場合、onNext
1 つのアイテムのデリゲートがonNext
次のアイテムの開始前に完了することを確認できます。
デフォルトでは、onNext
デリゲートは現在のスレッド ( を呼び出すスレッド) で実行されOnNext()
ますが、 を使用して変更できますObserveOn()
。
これが意味することは、物理ドライブごとに個別のオブザーバブルを作成し、それぞれを個別のスレッドで観察する必要があるということです。これを行う 1 つの方法は、実行する操作の観測可能要素が 1 つある場合、 を使用することGroupBy()
です。
どの特定のスケジューラーを使用しますか? ほとんど関係ないと思います。ObserveOn()
利用可能な場合に使用するScheduleLongRunning()
ようです。これは、最も一般的なスケジューラーにとって、監視用の新しいスレッドを作成することを意味します。
これらをすべてまとめると、コードは次のようになります。
operations.GroupBy(op => op.Drive)
.Select(o => o.ObserveOn(TaskPoolScheduler.Default))
.Do(o => o.Subscribe(op => op.Execute()))
.Subscribe();
(プロパティとメソッドoperations
を持つ操作タイプが観察可能であると仮定します。)Drive
Execute()