2015-08-28 19 views
5

Có thể xây dựng một bộ lập lịch tùy chỉnh có thể kiểm tra giá trị của mọi phần tử đi qua IObservable hay không, để quyết định chuỗi nào sẽ xử lý mục đó?Trình mở rộng phản ứng (RX) Bộ lập lịch tùy chỉnh C#

Tôi có yêu cầu xử lý các mục có cùng khóa liên tiếp nhưng các khóa khác nhau song song. Nó sẽ làm cho tinh thần để có RX làm việc lập kế hoạch hơn là phải rời khỏi quan sát sớm hơn tôi muốn để phân bổ mỗi giá trị cho một sợi.

Trả lời

7

Bạn đã thử GroupBy theo sau là ObserveOn?

Cái gì như:

source 
    .GroupBy(item => item.Key) 
    .SelectMany(group => group 
     .ObserveOn(Scheduler.NewThread) 
     .Select(item => process(item)) 
    ) 
    .Subscribe(processResult => ...); 

này sẽ phân vùng suối theo mã, bắt đầu một chủ đề mới cho mỗi phím, và chạy process() cho mỗi mục trong khóa đó.

+1

Điều đó rất tốt. Tôi chỉ chạy một thử nghiệm trong LINQPad và nó hoạt động rất đẹp. Tôi phải sử dụng điều này đôi khi. – Enigmativity

+0

thanh lịch nhưng nếu có hàng ngàn khóa thì sao? Lý tưởng nhất là một trình lên lịch có thể xử lý các mục có cùng một khóa tuần tự bằng cách sử dụng các tác vụ trên luồng threadpool? – benthemos

+1

Chắc chắn. Thay vào đó, bạn có thể muốn sử dụng 'Scheduler.Default', sẽ sử dụng threadpool hoặc Tasks tùy thuộc vào nền tảng của bạn. – Brandon

Các vấn đề liên quan