Chờ (), sẽ khiến chạy mã async có khả năng theo cách đồng bộ hóa. chờ đợi sẽ không.
Ví dụ: bạn có một ứng dụng web asp.net. Các cuộc gọi UserA / getUser / 1 điểm cuối. Nhóm ứng dụng asp.net sẽ chọn một luồng từ nhóm luồng (Thread1) và, luồng này sẽ thực hiện cuộc gọi http. Nếu bạn thực hiện Wait (), chuỗi này sẽ bị chặn cho đến khi cuộc gọi http được giải quyết. Trong khi chờ, nếu UserB gọi / getUser / 2, thì nhóm ứng dụng sẽ cần cung cấp một luồng khác (Thread2) để thực hiện lại cuộc gọi http. Bạn vừa tạo (Chà, thực sự được tải từ nhóm ứng dụng) một chủ đề khác mà không có lý do, vì bạn không thể sử dụng Thread1, nó đã bị Wait () chặn.
Nếu bạn sử dụng await trên Thread1, thì SyncContext sẽ quản lý đồng bộ hóa giữa cuộc gọi Thread1 và http. Đơn giản, nó sẽ thông báo khi cuộc gọi http được thực hiện. Trong khi đó, nếu UserB gọi / getUser / 2, thì bạn sẽ sử dụng lại Thread1 để thực hiện cuộc gọi http, vì nó đã được phát hành một khi chờ đợi bị tấn công. Sau đó, một yêu cầu khác có thể sử dụng nó, thậm chí nhiều hơn nữa. Khi cuộc gọi http được thực hiện (user1 hoặc user2), Thread1 có thể nhận kết quả và trả về cho người gọi (máy khách). Thread1 đã được sử dụng cho nhiều nhiệm vụ.
Task
mất 10 ms thực sự sẽ thực hiện 10 giờTask
trên chuỗi của bạn, do đó chặn bạn trong toàn bộ 10 giờ?