Tôi đang đọc về Nhiệm vụ được ưu tiên làm lập trình không đồng bộ với 4.0. Tôi chỉ tự hỏi nếu có bất kỳ trường hợp sử dụng, nơi sử dụng các nhiệm vụ không nên được ưa thích hơn bình thường C# chủ đề?Có trường hợp nào không nên sử dụng Tác vụ không?
Trả lời
Vì Task
s sử dụng phần cơ bản ThreadPool
(trừ khi được đánh dấu là chạy dài), bạn nên sử dụng chúng bất cứ khi nào sử dụng ThreadPool
không được thông báo, ví dụ:
- hoạt động I/O dài làm tắc nghẽn hàng đợi công việc và ngăn các tác vụ khác được thực thi.
- thực hiện các hoạt động yêu cầu nhận dạng chuỗi như đặt mối quan hệ.
này được đi vào chi tiết hơn ở đây: Should I notice a difference in using Task vs Threads in .Net 4.0?
khác biệt lớn nhất này là TaskFactory sử dụng sợi tổng hợp, vì vậy nếu bạn có rất nhiều nhiệm vụ mà họ có thể không bắt đầu ngay lập tức. Họ phải chờ một chuỗi miễn phí để chạy. Trong hầu hết các trường hợp, điều này có thể chấp nhận được ..
Chủ đề sẽ chạy ngay lập tức ngay sau khi .Start() được gọi, cho phép phần cứng.
Giả sử việc gộp nhóm là không sao, Nhiệm vụ cung cấp nhiều lợi ích bao gồm hủy, Tiếp tục, OnSuccess, OnError, Tổng hợp ngoại lệ và WaitAll để đặt tên một vài đầu khỏi đầu của tôi.
Chủ đề sẽ sẵn sàng ngay lập tức ngay sau khi .Start() được gọi. Chúng sẽ chạy khi một lõi có sẵn, thường là 'tức thời' là –
Điểm tốt, tôi nên làm rõ rằng Chủ đề là phần cứng giới hạn trong khi Nhiệm vụ là phần mềm bị giới hạn. – Dharun
Cảm ơn Dharun. Bài đăng trên blog dường như có sự so sánh tốt đẹp về các cách tiếp cận khác nhau. http://nitoprograms.blogspot.ca/2010/08/various-implementations-of-asynchronous.html – imak
- 1. Trường hợp sử dụng cho tác vụ buildNeeded?
- 2. Tôi có nên sử dụng một khung công tác không?
- 3. Hợp tác đa tác vụ bằng cách sử dụng TPL
- 4. Trường hợp không nên sử dụng các trường hợp ở Scala?
- 5. Trường hợp cơ sở có nên là Nguồn mở không?
- 6. Có nên sử dụng CruiseControl.NET để xử lý các tác vụ không liên quan đến nguồn xây dựng không?
- 7. Khi nào thì không nên sử dụng dịch vụ web?
- 8. Tôi có nên sử dụng 'Bảo mật tích hợp = True' trong môi trường sản xuất không?
- 9. Tôi có nên sử dụng "trường hợp lạc đà" hoặc dấu gạch dưới trong python không?
- 10. Những trường hợp nào tôi KHÔNG nên sử dụng executePendingTransactions của FragmentManager() (trong chuỗi chính)?
- 11. Tôi có nên sử dụng Chủ đề hoặc Tác vụ - Mô phỏng Nhiều khách hàng
- 12. Python: có trường hợp sử dụng nào để thay đổi lớp của cá thể không?
- 13. Trình tải có nên được sử dụng để truy cập các dịch vụ web không?
- 14. Sử dụng CurrentRoleInstance.Id để chạy tác vụ chỉ trong một trường hợp
- 15. Tôi có nên chọn mã tập lệnh hoặc biên dịch cho các tác vụ nhỏ không?
- 16. Tôi nên sử dụng trường MySQL nào cho giá trị Có/Không có Hộp kiểm?
- 17. Tôi có thể ghi đè tác vụ: môi trường trong test_helper.rb để kiểm tra tác vụ cào không?
- 18. Tôi có nên học/sử dụng MapReduce hoặc một số loại song song khác cho tác vụ này không?
- 19. android.os.NetworkOnMainThreadException. Cần sử dụng tác vụ không đồng bộ?
- 20. Có trường hợp sử dụng hợp lệ nào để sử dụng các biến công khai trong PHP OOP không?
- 21. nên WebClient trường hợp được tái sử dụng trong Silverlight
- 22. Tôi có nên sử dụng thừa kế hoặc sáng tác không?
- 23. Tôi có nên sử dụng HttpRuntime.Cache không?
- 24. Tôi có nên sử dụng ProGuard không?
- 25. Có trường hợp sử dụng nào không sử dụng "điều này" khi gọi GC.SuppressFinalize (điều này) không?
- 26. Tôi có nên sử dụng jQuery.each() không?
- 27. Tôi có nhiệm vụ Rails: tôi có nên sử dụng tập lệnh/runner hoặc cào không?
- 28. Tôi có nên chỉ sử dụng một dịch vụ mới() hoặc nhiều hơn không?
- 29. Trường hợp sử dụng DropBoxManager?
- 30. Khi nào nên sử dụng dịch vụ dữ liệu WCF và khi nào thì không?
Mối quan hệ chủ đề là một điểm rất tốt, mặc dù nó hiếm khi xuất hiện. –
+1 để đề cập đến thời gian chạy IO dài. –
Tôi khuyên bạn nên vẫn sử dụng các tác vụ cho các hoạt động dài hạn, miễn là bạn đánh dấu chúng là LongRunning. –