Trong thuật ngữ khoa học máy tính, a Task
là một tương lai hoặc một lời hứa . (Một số người sử dụng hai thuật ngữ này một cách đồng bộ, một số sử dụng chúng khác nhau, không ai có thể đồng ý về một định nghĩa chính xác .) Về cơ bản, một Task<T>
"lời hứa" sẽ trả lại cho bạn một T
, nhưng không phải bây giờ, tôi hơi bận, tại sao không bạn quay lại sau?
A Thread
là một cách để thực hiện lời hứa đó. Nhưng không phải mọi Task
nhu cầu một thương hiệu mới Thread
. (Trong thực tế, việc tạo một luồng thường không mong muốn, bởi vì làm như vậy tốn kém hơn nhiều so với việc sử dụng lại một luồng hiện có từ luồng đó. Thêm vào đó trong một khoảnh khắc.) cơ sở dữ liệu hoặc mạng, sau đó không cần một luồng để ngồi và chờ dữ liệu khi nó có thể phục vụ các yêu cầu khác. Thay vào đó, Task
có thể đăng ký gọi lại để nhận (các) giá trị khi chúng sẵn sàng.
Đặc biệt, Task
không không nói lý do tại sao nó là nó mất một thời gian dài như vậy để trả về giá trị. Có thể mất nhiều thời gian để tính toán hoặc có thể mất nhiều thời gian để tìm nạp. Chỉ trong trường hợp trước, bạn sẽ sử dụng a Thread
để chạy a Task
. (Trong .NET, các luồng rất đắt, vì vậy bạn thường muốn tránh chúng càng nhiều càng tốt và thực sự chỉ sử dụng chúng nếu bạn muốn chạy nhiều tính toán nặng trên nhiều CPU. Ví dụ, trong Windows, một luồng nặng 12 KiByte ( Tôi nghĩ), trong Linux, một luồng chỉ nặng bằng 4 KiByte, trong Erlang / BEAM thậm chí chỉ 400 Byte. Trong .NET, đó là 1 MiByte!)