Tôi đang cố gắng thực hiện tác vụ ở chế độ nền mà không làm đóng băng giao diện người dùng.Chạy các tác vụ dài mà không đóng băng Giao diện người dùng
Tất nhiên, tôi có thể sử dụng BackgroundWorker cho việc này.
Tuy nhiên, tôi chỉ muốn làm điều đó với API tác vụ.
tôi đã cố gắng:
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
await LongOperation();
}
// It freezes the UI
và
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
var task = Task.Run(()=> LongOperation());
task.Wait();
}
// It freezes the UI
Vì vậy, tôi nên trở về BackgroundWorker? Hay chỉ có một giải pháp bằng cách sử dụng Tác vụ?
Tại sao nhiều người không thích BackgroundWorker? Tôi thích nó và tìm cú pháp trực tiếp. – Paparazzi
'BackgroundWorker' tốt hơn' Thread', nhưng 'API dựa trên Task' cuối cùng sẽ thống trị. Tôi có [một bài đăng blog liên quan] (http://nitoprograms.blogspot.com/2010/08/various-implementations-of-asynchronous.html). 'Task.Run' có những ưu điểm sau: (1) cho phép lồng ghép; (2) hỗ trợ hủy bỏ sử dụng hệ thống 'CancellationToken' hợp nhất; (3) ngoại lệ được tuyên truyền tự nhiên hơn với một ngăn xếp cuộc gọi chính xác; (4) kết quả được lấy tự nhiên hơn; (5) sử dụng ít tài nguyên hơn (nhóm luồng thay vì chuỗi chuyên dụng). –