Tôi hiện đang cố gắng để quấn đầu của tôi xung quanh đồng thời với RX .NET và bị lẫn lộn bởi một cái gì đó. Tôi muốn chạy bốn nhiệm vụ tương đối chậm song song, vì vậy tôi giả định NewThreadScheduler.Default
sẽ là cách để đi, vì nó "Đại diện cho một đối tượng lên lịch mỗi đơn vị công việc trên một chuỗi riêng biệt.".NewThreadScheduler.Default lịch trình tất cả các công việc trên cùng một chủ đề
Đây là mã thiết lập của tôi:
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);
}
tôi cho rằng "X Chủ đề Y" sẽ ra một chủ đề khác nhau id mọi thời gian, tuy nhiên sản lượng thực tế là:
Starting. Thread 1
Last line. Thread 1
1 Thread 3
2 Thread 3
3 Thread 3
4 Thread 3
Done. Thread 3
Tất cả công việc là là một trong cùng một chủ đề mới trong thứ tự tuần tự, đó không phải là những gì tôi mong đợi.
Tôi giả sử tôi đang thiếu thứ gì đó, nhưng tôi không thể hiểu được điều gì.
Cảm ơn bạn vì điều này. Không chỉ là bạn làm rõ những gì tôi đang làm sai, nhưng tôi cũng nghĩ rằng những gì bạn nói về ý định của Rx làm cho rất nhiều ý nghĩa. –
Câu trả lời ở trên dường như đã lỗi thời, phương thức Do không còn khả dụng trên Enumerable. – VivekDev
Để phương thức Do hoạt động, bạn cần phải cài đặt gói gói System.Interactive – VivekDev