我目前正试图用 RX .NET 来解决并发问题,并被某些东西弄糊涂了。我想并行运行四个相对较慢的任务,所以我认为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 Thread Y”每次都会输出不同的线程 id,但实际输出是:
Starting. Thread 1
Last line. Thread 1
1 Thread 3
2 Thread 3
3 Thread 3
4 Thread 3
Done. Thread 3
所有的工作都是按顺序在同一个新线程上完成的,这不是我所期望的。
我假设我错过了一些东西,但我不知道是什么。