Nếu một phương thức được khai báo là 'không đồng bộ', khi chúng ta gọi phương thức đó, chúng ta có thể sử dụng đang chờ hoặc không sử dụng nó. Tôi muốn biết khi nào nên sử dụng nó và tác động của việc sử dụng nó là gì.Khi nào sử dụng từ khóa chờ đợi
Trả lời
Từ khóa không đồng bộ chỉ là một chỉ báo cho trình biên dịch mà phương thức có thể chứa câu lệnh chờ.
Có một bài thú vị bởi Eric Lippert giải thích sự lựa chọn thiết kế
Yêu cầu "async" có nghĩa là chúng ta có thể loại bỏ tất cả các vấn đề tương thích ngược cùng một lúc; bất kỳ phương thức nào có biểu thức chờ đợi phải là mã "xây dựng mới", không phải là mã "công việc cũ", vì mã "công việc cũ" chưa bao giờ có công cụ sửa đổi không đồng bộ.
http://blogs.msdn.com/b/ericlippert/archive/2010/11/11/whither-async.aspx
Phương pháp async rõ rệt thường sử dụng đang chờ đợi để chỉ định điểm treo. Toán tử await cho trình biên dịch biết rằng phương thức async không thể tiếp tục qua điểm đó cho đến khi quá trình không đồng bộ được chờ đợi hoàn tất. Trong khi chờ đợi, kiểm soát trả về cho người gọi của phương pháp async.
nói cách khác nếu bạn đang làm lập trình asyncronius và muốn chạy nhiệm vụ chủ đề nhất định simultaniusly bạn sẽ muốn dựa vào async và chờ
giải thích chi tiết hơn đang ở đây
http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx
- 1. Đệ quy và từ khóa chờ đợi/không đồng bộ
- 2. Điều kiện chờ đợi và chờ đợi
- 3. Khi nào cần chờ đợi và khi nào?
- 4. MySQL: "khóa thời gian chờ đợi vượt quá"
- 5. AsyncCodeActivities Thực hiện (sử dụng C# async/chờ đợi)
- 6. Agent/MailboxProcessor trong C# sử dụng async mới/chờ đợi
- 7. C# và Tasks - UI Thread Hang - Pre-Async/Từ khóa chờ đợi
- 8. HttpClient không ném ngoại lệ khi sử dụng đang chờ đợi trên GetAsync
- 9. Kết hợp chờ đợi ngầm và chờ đợi rõ ràng cùng kết quả trong thời gian chờ đợi bất ngờ
- 10. Future.wait() không thể chờ đợi mà không có chất xơ (trong khi chờ đợi một tương lai khác trong Meteor.method)
- 11. Đợi cho đến khi tệp được mở khóa trong .NET
- 12. Hiểu async/chờ đợi mà không đề
- 13. chờ Task.Factory.StartNew (() => so Task.Start; chờ đợi công tác;
- 14. "SyntaxError: không từ khóa arg sau từ khóa arg" Lỗi trong Python khi sử dụng requests.post()
- 15. Tôi nên sử dụng phương pháp/lớp tĩnh trong các hoạt động không đồng bộ/chờ đợi như thế nào?
- 16. Chặn tệp Java không có ngoại lệ; chờ đợi trên khóa
- 17. xcode hết thời gian chờ đợi ứng dụng khởi chạy
- 18. vui lòng đợi trong khi Jenkins là restarting- chờ đợi lâu
- 19. Ngăn chặn một bế tắc khi gọi một phương pháp async mà không sử dụng chờ đợi
- 20. đang chờ đợi tuyên bố vs biểu
- 21. Thực hiện thời gian chờ async sử dụng mans async nghèo/chờ đợi các cấu trúc trong Net 4.0
- 22. Điều gì là không đồng bộ và chờ đợi và khi nào bạn sẽ sử dụng chúng trong phát triển cửa sổ?
- 23. Các semaphores Java có sử dụng chờ đợi bận hoặc chờ/thông báo theo mặc định không?
- 24. Sử dụng tính năng chờ đợi không đồng bộ trên .net 4
- 25. GUI Khóa khi sử dụng PrintDialog và PrintPreviewDialog trong .net
- 26. được khóa vào nhau - khi nào tôi sử dụng?
- 27. chờ đợi chặn Non trong python
- 28. Chờ() cần thiết sau khi sử dụng Task.Factory.StartNew()?
- 29. Fork WEBrick và chờ đợi bắt đầu
- 30. Try Catch ngoài: đang chờ đợi Task.Run (()
Bạn tiếp cận nó ngược: bạn nên sử dụng 'async' chỉ khi bạn cần sử dụng' await'. Bạn sử dụng 'await' khi bạn cần phải chờ đợi một cách không đồng bộ cho một số thao tác. –