Nếu bạn định bắt đầu nhiệm vụ dài hạn với TPL, bạn nên chỉ định TaskCreationOptions.LongRunning
, điều này có nghĩa là không phải là lên lịch trên nhóm chủ đề. (EDIT: Như đã lưu ý trong phần nhận xét này, là quyết định lên lịch cụ thể và không phải là đảm bảo cứng và nhanh, nhưng tôi hy vọng rằng bất kỳ lập lịch sản xuất hợp lý nào cũng sẽ tránh lập lịch các tác vụ chạy dài trên một nhóm luồng.)
Bạn chắc chắn không nên lên lịch cho một số lượng lớn các tác vụ dài hạn trên chính hồ bơi. Tôi tin rằng những ngày này kích thước mặc định của các hồ bơi thread là khá lớn (vì nó thường bị lạm dụng theo cách này) nhưng về cơ bản nó không nên được sử dụng như thế này.
Điểm của hồ bơi chuỗi là để tránh ngắn các tác vụ thực hiện một lần truy cập lớn từ việc tạo chuỗi mới, so với thời gian chúng thực sự đang chạy. Nếu tác vụ sẽ chạy trong một thời gian dài, tác động của việc tạo một luồng mới sẽ tương đối nhỏ - và bạn không muốn kết thúc khả năng chạy ra khỏi các luồng của luồng chủ đề. (Hiện tại ít có khả năng hơn, nhưng tôi đã làm trải nghiệm nó trên các phiên bản .NET cũ hơn.)
Cá nhân nếu tôi có tùy chọn, tôi chắc chắn sẽ sử dụng TPL với lý do là API Task
là khá hay - nhưng do hãy nhớ nói với TPL rằng bạn mong đợi nhiệm vụ chạy trong một thời gian dài.
EDIT: Như đã nêu trong các ý kiến, xem thêm bài đăng blog đội PFX về choosing between the TPL and the thread pool:
Tóm lại, tôi sẽ nhắc lại những gì nhà phát triển ThreadPool đội CLR của đã tuyên bố:
Task is now the preferred way to queue work to the thread pool.
CHỈNH SỬA: Cũng từ nhận xét, đừng quên rằng TPL cho phép bạn sử dụng custom schedulers, nếu bạn thực sự muốn ...
Nguồn
2012-02-08 20:06:27
Tôi cảnh giác với tốc độ nhanh quy tắc rằng 'TaskCreationOptions.LongRunning' sẽ luôn tránh thread-pool. Nó có vẻ là một chỉ thị hơn là bảo đảm thực hiện. Tôi có căn cứ vào điều đó không? – Marc
@Marc: Vâng, nó phụ thuộc vào lịch trình - nhưng nó sẽ là một bộ lập kế hoạch khá điên rồ để lên lịch các nhiệm vụ dài hạn rõ ràng trên nhóm luồng, IMO. –
Chỉ cần thêm một chút thông tin - http://blogs.msdn.com/b/pfxteam/archive/2009/10/06/9903475.aspx –