私は現在、RX .NET との並行性に頭を悩ませようとしていて、何かに混乱しています。4つの比較的遅いタスクを並行して実行したいので、 「各作業単位を個別のスレッドでスケジュールするオブジェクトを表す」NewThreadScheduler.Default
のが良いと思いました。.
これが私のセットアップコードです:
static void Test()
{
Console.WriteLine("Starting. Thread {0}", Thread.CurrentThread.ManagedThreadId);
var query = Enumerable.Range(1, 4);
var obsQuery = query.ToObservable(NewThreadScheduler.Default);
obsQuery.Subscribe(DoWork, Done);
Console.WriteLine("Last line. Thread {0}", Thread.CurrentThread.ManagedThreadId);
}
static void DoWork(int i)
{
Thread.Sleep(500);
Console.WriteLine("{0} Thread {1}", i, Thread.CurrentThread.ManagedThreadId);
}
static void Done()
{
Console.WriteLine("Done. Thread {0}", Thread.CurrentThread.ManagedThreadId);
}
「XスレッドY」は毎回異なるスレッドIDを出力すると想定しましたが、実際の出力は次のとおりです。
Starting. Thread 1
Last line. Thread 1
1 Thread 3
2 Thread 3
3 Thread 3
4 Thread 3
Done. Thread 3
すべての作業は、同じ新しいスレッドで順番に実行されますが、これは私が期待していたものではありません。
何かが欠けていると思いますが、何がわかりません。