2014-04-24 15 views
5

Tôi đã thực hiện riêng của mình TaskScheduler. Lý do chính cho sự tồn tại của nó là nó sẽ thiết lập mối quan hệ lõi bộ vi xử lý cho thread chạy nhiệm vụ của tôi.Cách đặt TaskScheduler tùy chỉnh của tôi làm mặc định

Khi tôi sử dụng nó theo cách sau đây:

var myTaskSceduler = new MyTaskScheduler(4); 
var taskFactory = new TaskFactory(myTaskSceduler); 
taskFactory.StartNew(DoSomething); 

các mối quan hệ làm việc tốt, công việc sẽ chỉ chạy trên các lõi quy định.

Làm thế nào tôi có thể thay đổi hoặc Task.FactoryTask.Factory.Scheduler để lên lịch của tôi sẽ là mặc định một bất cứ khi nào

Task.Factory.StartNew() 

đang được gọi là?

+0

Bạn không thể. 'Task.Factory' và' TaskScheduler.Default' được hỗ trợ bởi các trường chỉ đọc tĩnh. Cách duy nhất mà bộ lập lịch mặc định của 'TaskFactory' có thể được thiết lập là thông qua hàm tạo của nó. –

Trả lời

0

Tại sao không chỉ tạo phương pháp tĩnh của riêng bạn, MyTask.StartNew()? Bạn không phải xác định mối quan hệ như một tham số?

Trong mọi trường hợp, nhà máy tác vụ phải sử dụng cùng một trình lập lịch mà bạn đang sử dụng khi bạn gọi StartNew. Vì vậy, nếu bạn làm điều đó trên một nhiệm vụ trên lịch trình thích hợp, nó sẽ làm việc tốt. Điều này thực sự phụ thuộc vào cách bạn xử lý lịch trình xử lý của bạn vv, nhưng tôi cho rằng bạn sẽ phụ thuộc vào ngữ cảnh dù sao nếu bạn không đi qua ái lực ở bất cứ đâu.

+0

thực sự tôi cần nó vì vậy tất cả các nhiệm vụ được tạo ra bởi các phương pháp không đồng bộ/chờ đợi của tôi sẽ được lên lịch bằng cách sử dụng bộ lập lịch biểu của tôi. Không có tham số để vượt qua, mối quan hệ được mã hóa cứng tại thời điểm –

+0

@HadarGrubman Ah. Trong trường hợp đó, chỉ cần chắc chắn rằng bạn đang làm việc chờ đợi trong nhiệm vụ cha mẹ thích hợp (được bắt đầu trên lịch trình bạn muốn), và nó sẽ làm việc tốt. – Luaan

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