Parallel Extensions Extras Samples. đã cung cấp bộ lập lịch như vậy, QueuedTaskScheduler. Trình lên lịch này cung cấp mức độ ưu tiên, giới hạn đồng thời, công bằng và kiểm soát chi tiết hơn đối với loại và mức độ ưu tiên của chuỗi được sử dụng. Tất nhiên, bạn không phải sử dụng hoặc cấu hình các tính năng bạn không cần.
Stephen Toub cung cấp một mô tả ngắn gọn về các schedulers khác nhau trong Extensions Extras Parallel here
Để sử dụng QueuedTaskScheduler, bạn gọi phương thức ActivateNewQueue của nó với các ưu tiên mà bạn cần. Phương thức này trả về một đối tượng Queue có nguồn gốc TaskScheduler mới được quản lý bởi TaskScheduler cha. Tất cả các tác vụ sử dụng một hàng đợi cụ thể được lên lịch bởi TaskScheduler phụ huynh theo các ưu tiên của chúng.
Đoạn mã sau tạo một lịch trình với một mức độ đồng thời tối đa là 4, hai hàng đợi ưu tiên và lịch trình một nhiệm vụ trên hàng đợi đầu tiên:
QueuedTaskScheduler qts = new QueuedTaskScheduler(TaskScheduler.Default,4);
TaskScheduler pri0 = qts.ActivateNewQueue(priority: 0);
TaskScheduler pri1 = qts.ActivateNewQueue(priority: 1);
Task.Factory.StartNew(()=>{ },
CancellationToken.None,
TaskCreationOptions.None,
pri0);
Nguồn
2012-02-17 10:21:31
Đó scheduler sử dụng một LinkedList cho một hàng đợi. Hãy thử thay đổi nó thành một SortedList trong đó T là một cấu trúc giữ một Task và một số nguyên cho priority, và sắp xếp danh sách trên T.Priority. –
@IgbyLargeman - [SortedList] (http://msdn.microsoft.com/en-us/library/ms132319.aspx) có thể không phải là giải pháp lý tưởng - các khóa (ưu tiên) phải là duy nhất. Hầu hết các hệ thống ưu tiên chỉ có một vài cấp độ và cho phép nhiều mục được chỉ định cùng mức độ ưu tiên –
đó là một ý tưởng tồi. Một hàng đợi có nội bộ một tập hợp (mảng) của hàng đợi - một cho mọi ưu tiên - là một cách tốt hơn. Các ưu tiên không phải là duy nhất và chỉ giới hạn ở một số lượng nhỏ. Cũng không sử dụng một danh sách liên kết - Tôi có một "hàng đợi" mà nội bộ sử dụng mảng của 4096 yếu tố, cộng với opointers. phân bổ ít hơn nhiều - các mục được xóa khỏi "trang" phía trước, được thêm vào thứ hai. Phân bổ ít hơn, ít rác hơn để thu thập. – TomTom