З точки зору інформатики, a Task
- це майбутнє або обіцянка . (Деякі люди використовують ці два терміни синомічно, інші використовують їх по-різному; ніхто не може погодитися на точне визначення.) В основному, Task<T>
"обіцяє" повернути вам T
, але не зараз, дорогий, я начебто зайнятий, чому б не ви повернетесь пізніше?
А Thread
це спосіб виконання цієї обіцянки. Але не кожному Task
потрібен абсолютно новий Thread
. (Насправді, створювати потік часто небажано, тому що робити це набагато дорожче, ніж повторне використання існуючої нитки з нитки. Більше про це за мить.) Якщо значення, яке ви чекаєте, походить з файлової системи або базі даних або мережі, тоді немає потреби в потоці, щоб сидіти і чекати даних, коли вони можуть обслуговувати інші запити. Натомість, Task
можливо, зареєструйте зворотний дзвінок, щоб отримати значення (и), коли вони готові.
Зокрема, Task
це НЕ сказати , чому це, що це займає так багато часу , щоб повернути значення. Це може бути , що це займає багато часу , щоб обчислити, чи це може бути , що це займає багато часу для отримання. Тільки в першому випадку ви використовували Thread
б запуск а Task
. (У .NET, потоки виглядають дорого, тому ви, як правило, хочете їх максимально уникати, а реально використовувати їх лише у тому випадку, якщо ви хочете виконувати декілька важких обчислень на декількох процесорах. Наприклад, у Windows тематика важить 12 KiByte ( Я думаю) в Linux нитка важить всього 4 KiByte, в Erlang / BEAM навіть всього 400 байт. У .NET, це 1 MiByte!)