2012-01-27 11 views
5

Tôi đã phương pháp sau đó sử dụng lập lịch trình ngầm:Rõ ràng xác định TaskScheduler cho một phương pháp ngầm dự kiến ​​

private async Task FooAsync() 
{ 
    await Something(); 
    DoAnotherThing(); 
    await SomethingElse(); 
    DoOneLastThing(); 
} 

Tuy nhiên, từ một cuộc gọi-trang web cụ thể tôi muốn nó chạy trên một lịch trình có mức ưu tiên thấp thay vì mặc định:

private async Task BarAsync() 
{ 
    await Task.Factory.StartNew(() => await FooAsync(), 
     ..., 
     ..., 
     LowPriorityTaskScheduler); 
} 

Làm cách nào để đạt được điều này? Nó có vẻ giống như một câu hỏi thực sự đơn giản, nhưng tôi đang có một khối tinh thần hoàn chỉnh!

Lưu ý: Tôi biết ví dụ sẽ không thực sự biên dịch :)

Trả lời

7

Tạo ví dụ TaskFactory của riêng bạn, được khởi tạo với trình lên lịch bạn muốn. Sau đó gọi StartNew trên dụ rằng:

TaskScheduler taskScheduler = new LowPriorityTaskScheduler(); 
TaskFactory taskFactory = new TaskFactory(taskScheduler); 
... 
await taskFactory.StartNew(FooAsync); 
+0

Nếu bạn cần để có được một lợi nhuận từ chờ đợi, bạn cũng nên Unwrap nó, tức là chờ đợi taskFactory.StartNew (FooAsync) .Unwrap; – VoteCoffee

+0

Bạn có thể thêm mã hoặc tham chiếu cho 'LowPriorityTaskScheduler' không? – xmedeko

+0

@xmedeko: 'LowPriorityTaskScheduler' là loại của op chứ không phải của tôi. –

-1

Bạn có thể thiết lập thread-ưu tiên, nhưng trong phương pháp của chủ đề:

System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.BelowNormal; 

Kiểm tra các giá trị khác của ThreadPriority enum.