Khi nào tôi nên sử dụng tính năng không đồng bộ/đang chờ và khi nào tôi nên sử dụng song song.foreach trong C#? Là song song và không đồng bộ/chờ đợi phục vụ cùng một mục đích? Sự khác biệt trong chúng là gì?Không đồng bộ/chờ và song song trong C#
23
A
Trả lời
72
async/chờ đợi là khoảng không đồng bộ của, trong khi Parallel.ForEach
khoảng song song. Chúng là các khái niệm liên quan, nhưng không giống nhau.
Parallel.ForEach
được sử dụng khi bạn muốn thực hiện cùng một thao tác trên tất cả các mục trong bộ sưu tập, song song, chặn luồng hiện tại cho đến khi tất cả các thao tác đã hoàn tất.
async/await được sử dụng khi thao tác hiện tại không thể thực hiện thêm tiến trình nào cho đến khi một thao tác không đồng bộ cụ thể hoàn tất, nhưng bạn không muốn chặn luồng hiện tại. Điều này đặc biệt hữu ích trong hai trường hợp:
- Viết mã cơ bản về các hoạt động không đồng bộ khác nhau, cái khác, trên chuỗi giao diện người dùng, truy cập vào giao diện người dùng ngắn gọn giữa các thao tác. (Nó tổng quát hơn thế, nhưng đó là một ví dụ đơn giản.) Bạn không muốn chặn luồng giao diện người dùng, nhưng việc quản lý tất cả các hoạt động không đồng bộ đó là một cách khác.
- Xử lý lô hàng hoạt động lâu dài tại một thời điểm - ví dụ: trong máy chủ web. Mỗi yêu cầu cá nhân có thể mất một thời gian dài do gọi vào dịch vụ web khác, cơ sở dữ liệu vv - nhưng bạn không muốn có một luồng cho mỗi yêu cầu, vì luồng là một tài nguyên tương đối tốn kém.
Bạn có thể kết hợp song song và không đồng bộ bằng cách khởi chạy tác vụ mới sẽ gọi Parallel.ForEach
và chờ nhiệm vụ đó. (Chỉ như một ví dụ.)
Các vấn đề liên quan
- 1. LinqToSql - Song song - DataContext và song song
- 2. quicksort song song trong c
- 3. Lặp song song trong C#?
- 4. Lập trình song song và C++
- 5. Lập trình song song trong C#
- 6. Phân công song song trong C++
- 7. Song song và phân chia công việc trong C#?
- 8. OpenMP - Chạy mã song song bên trong mã song song
- 9. Repa Không song song
- 10. boost.python không hỗ trợ tính song song?
- 11. Android: Chủ đề không chạy song song
- 12. Song song trong Julia. Các tính năng và hạn chế
- 13. song song javascript
- 14. Giới hạn số chuỗi song song trong C#
- 15. Bộ lặp song song
- 16. Trong mã song song OpenMP, sẽ có bất kỳ lợi ích nào cho bộ nhớ để chạy song song không?
- 17. Sự khác nhau giữa thư đang chờ và không đồng bộ và thư viện Task song song
- 18. báo cáo Chạy trong 'song song'
- 19. Song song cho vòng lặp trong Windows
- 20. Phân bổ mảng song song trong PHP
- 21. Xử lý song song trong linux
- 22. Luồng song song với Xử lý song song
- 23. Giảm song song
- 24. chạy song song AsyncTask
- 25. Maven Chắc chắn: Không thể thực hiện kiểm tra song song song song
- 26. Sao chép song song/dự phòng trong CouchDB
- 27. Sử dụng các đại biểu không đồng bộ hoặc ThreadPool.QueueUserWorkItem cho chủ nghĩa song song lớn?
- 28. Biến ổ cắm async Song song và không chỉ đồng thời trong ứng dụng rất chuyên sâu sử dụng TPL
- 29. Tại sao đồng thời haskell không xác định trong khi song song haskell nguyên thủy (mệnh và pseq) xác định?
- 30. Yêu cầu HTTP song song trong ruby
Xem câu hỏi liên quan này: http://stackoverflow.com/questions/9898441/do-the-new-c-sharp-5-0-async-and-await-keywords-use -multiple-core –
Xem cách gọi các hoạt động không đồng bộ trong https://stackoverflow.com/questions/11564506/nesting-await-in-parallel-foreach/11565531#11565531 song song –