Như Reed nói, điều đó thực sự phụ thuộc vào ngữ cảnh. Mã phải chạy ở số một số điểm - nhưng tùy thuộc vào ngữ cảnh, mã có thể kết thúc chạy trên một chuỗi chủ đề thay vì một số chủ đề quan trọng.
Thay vì sử dụng Task.Run
, tôi muốn sử dụng TaskEx.Yield
:
public async Task Foo()
{
await TaskEx.Yield();
// Do expensive stuff
}
Theo như tôi biết, đó là về cơ bản một cách ngay lập tức quay trở lại cho người gọi, nhưng cho phép các phần còn lại của phương pháp async để được lên lịch ngay lập tức. Nếu bạn đang ở trong một cái gì đó giống như một giao diện người dùng Windows Forms, không có điểm trong việc này vì bạn sẽ trở lại giao diện người dùng (và chạy mã đắt tiền ở đó) ngay lập tức - nhưng nó sẽ có ý nghĩa nếu bạn đang ở trong một ngữ cảnh nơi mà các thread hiện tại không nên bị chặn, nhưng tiếp tục được chạy trên thread khác.
Nguồn
2011-12-09 17:15:43
Bạn có thể giả mã một ví dụ không? – vcsjones