Stephen Toub blogged rằngsự khác biệt về khái niệm giữa SynchronizationContext và TaskScheduler
Cả SynchronizationContext và TaskScheduler là trừu tượng mà đại diện cho một “lịch trình”, một cái gì đó mà bạn cung cấp cho một số công việc, và nó xác định khi nào và ở đâu là gì chạy công việc đó. Có nhiều hình thức khác nhau của các bộ lập lịch biểu. Ví dụ, ThreadPool là một scheduler: bạn gọi ThreadPool.QueueUserWorkItem để cung cấp cho một đại biểu để chạy, rằng đại biểu được xếp hàng đợi, và một trong các chủ đề của ThreadPool cuối cùng chọn và chạy đại biểu đó. Giao diện người dùng của bạn cũng có một bộ lập lịch : bơm thông báo.
Vì vậy System.Reactive.Concurrency.EventLoopScheduler
, Dispatcher, ThreadPool, TaskScheduler, SyncrhonizationContext, và IScheduler implementations of Reactive Extensions là tất cả "schedulers" trong ý nghĩa đó.
Sự khác nhau giữa chúng là gì?
Tại sao tất cả đều cần thiết? Tôi nghĩ rằng tôi nhận EventLoop, Dispatcher, ThreadPool. IScheduler cũng được giải thích.
Nhưng TaskScheduler và SyncrhonizationContext vẫn chưa rõ ràng với tôi.
Stephen Cleary's excellent article giải thích SyncrhonizationContext, và tôi nghĩ mình đã hiểu. Tại sao chúng ta cần TaskScheduler, không rõ ràng.
Vui lòng giải thích hoặc trỏ đến nguồn.
Có thể có một số lý do, như câu trả lời gợi ý. Một khác chưa được đề cập đến mà tôi tìm thấy trong MSDN này Bài viết blog: http://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259082.aspx Nó nói rằng SyncrhonizationContext.Post asyncronous phương pháp không cung cấp thông báo khi mục công việc được thực hiện. Bài viết gợi ý cách thêm một phương thức mở rộng sử dụng TaskCompletionSource để trả lại một tác vụ –