Tôi đã đọc rằng 'Người tạo nền tảng' là designed to be replaced bởi Ansyc/Await.Có phải chờ đợi thực hiện phần còn lại của phương thức không đồng bộ không?
Vì tôi thích giao diện của Async/Await, tôi bắt đầu chuyển đổi một số BackgroundWorkers của tôi thành các cuộc gọi Async/Await.
Đây là một ví dụ về đoạn code tôi có (gọi là từ UI):
public async void RunFromTheUI()
{
await OtherAction();
}
public async void OtherAction()
{
var results = await services.SomeRemoteAction();
foreach (var result in results)
{
result.SemiIntenseCalculation();
Several();
Other();
NonAsync();
Calls();
}
SomeFileIO();
}
Khi tôi gọi RunFromTheUI
nó sẽ trở lại gần như ngay lập tức (theo Async và đang chờ đợi thiết kế).
Nhưng khi nó tiếp tục sau khi services.SomeRemoteAction()
kết thúc, nó có một vòng lặp foreach
và một cuộc gọi phương thức khác để chạy qua.
Câu hỏi của tôi là: Nếu vòng lặp đó là một con heo hiệu suất sẽ đóng băng giao diện người dùng? (Trước khi tôi có tất cả trong một chuỗi công nhân nền, do đó, nó không làm chậm giao diện người dùng).
Lưu ý: Tôi đang nhắm mục tiêu .Net 4.0 và sử dụng Gói phần mềm Async Nuget.
không đồng bộ/chờ đợi và BackgroundWorker giải quyết hai vấn đề khác nhau. Nhân viên BG được thay thế chính xác hơn bằng Nhiệm vụ. Async chỉ thay thế những mã này khi mã cơ thể của nhân viên cơ bản là nhàn rỗi, nơi BGW/Tasks vẫn hữu ích khi bạn cần nâng cấp nặng. Tôi có vẻ như bạn đang chờ đợi kết quả dịch vụ trong câu hỏi của bạn, chỉ là FYI. –
1. Mã của bạn sẽ không biên dịch, bạn không thể 'chờ đợi' phương thức 'async void'. 2. Bạn nên tránh sử dụng các phương thức 'async void', chúng không thể được 'chờ đợi' và làm cho việc xử lý ngoại lệ trở nên khó khăn hơn. – svick