Tôi đã đọc về các Task Parallel Library và bài viết nói:Nên .Net 4.0 Nhiệm vụ luôn là phương pháp ưu tiên cho các ứng dụng đa luồng?
Trong .NET Framework 4, nhiệm vụ là API ưa thích cho các văn bản đa luồng, không đồng bộ, và mã song song
Nhưng nó cũng nói rằng họ sử dụng ThreadPool đằng sau hậu trường. Những gì tôi gặp khó khăn trong việc tìm ra là nhiệm vụ chỉ nên được sử dụng khi bạn sử dụng ThreadPool (và vì vậy "Thread vs. Task" sẽ tương đương với "Thread so ThreadPool"), hoặc nếu Microsoft dự định sử dụng Tasks bất cứ nơi nào nhiều chủ đề được yêu cầu, mà không có những cân nhắc vốn có cho tình trạng tiến thoái lưỡng nan "Thread vs. ThreadPool".
Vì vậy, các Công việc có nên được sử dụng ở bất kỳ nơi nào có nhiều chủ đề được yêu cầu không?
Đó là sự hiểu biết của tôi rằng các tác vụ chạy dài phù hợp nhất cho các chủ đề, trong khi các tác vụ ngắn hơn thì tốt hơn cho ThreadPool. Ngoài ra còn có vấn đề về nền trước so với nền. Tác vụ có thực sự tìm hiểu xem chức năng được truyền trong có chạy dài hay không hoặc liệu nó có phải là tiền cảnh hoặc nền không? Tôi không thấy nó có thể như thế nào. Vậy làm thế nào nó có thể hỏi liệu một ThreadPool là tuyến đường tốt nhất hay không? Và nếu nó luôn luôn sử dụng một ThreadPool, một trong những nên tiếp tục sử dụng một thread khi ThreadPool là không thích hợp? – Bob
Bạn nói đúng, nó không thể biết được nhiệm vụ có dài hạn hay không, đó là vấn đề dừng lại. Từ những gì tôi hiểu, thời gian chạy có thể xác định xem truy vấn hoặc chức năng của bạn có bị ràng buộc tính toán hay ràng buộc IO hay không, và nó chọn chiến lược phù hợp. – cunningdave
Không thấy độ dài của tác vụ liên quan đến câu hỏi Threadpool. Mục đích của Threadpool là giảm thiểu chi phí của việc tạo và giết các luồng bằng cách sử dụng lại phân bổ luồng với các nhiệm vụ tùy ý. Nhưng Threadpool được thực hiện bằng cách sử dụng Threads, được quản lý bởi một trọng tài viên. Tôi không chắc chắn nếu bàn giao một nhiệm vụ lâu dài cho một hồ bơi thực sự là một thiệt hại, khác hơn là có lẽ làm thế nào nó xử lý việc quản lý thread. Quay lại Q, thời gian chạy có thể chọn một cách tiếp cận tinh vi hơn tùy thuộc vào những gì nó xác định là chiến lược tốt nhất. tức là bạn có thể thực hiện Asynch trên một luồng bằng cách sử dụng PostMessage. – cunningdave