Ответ 1
Есть два основных преимущества при использовании Task
s:
-
Task
может представлять любой результат, который будет доступен в будущем (общая концепция не специфична для .Net и называется future), а не просто вычисление. Это особенно важно в .Net 4.5 с упором на использованиеTask
для асинхронных операций. Поскольку операция, которая получает результат, может завершиться неудачей,Task
также может представлять ошибки. -
Task
имеет множество методов для их работы. Вы можете синхронно ждать, пока он не закончится (Wait()
), дождитесь его результата (Result
), настройте некоторую операцию, когдаTask
закончит (ContinueWith()
), а также некоторые методы, которые работают с несколькимиTask
(WaitAll()
,WaitAny()
,ContinueWhenAll()
). Все это возможно с использованием других методов параллельной обработки, но вам придется делать это вручную.
И есть также несколько меньших преимуществ использования Task
:
- Вы можете использовать пользовательский
TaskScheduler
, чтобы решить, когда и где будет выполнятьсяTask
. Это может быть полезно, например, если вы хотите запуститьTask
в потоке пользовательского интерфейса, ограничить степень parallelism или имеютTask
-уровень чтения-записи читателей. -
Task
поддержка совместной отмены черезCancellationToken
. -
Task
, которые представляют вычисления, имеют некоторые улучшения производительности. Например, они используют очередь обработки для более эффективной обработки, а также поддерживают inlining (выполнениеTask
, которое еще не началось в потоке, который синхронно ждет его).