Wait()
не вызывает задачу на Start()
. Если вы вызовете Wait()
для незапущенной задачи, она будет ждать начала и завершения, пока не завершится, не истекло время ожидания или ожидание не отменено. Поскольку ваш вызов Wait()
не содержит токена отмены или тайм-аута, выполнение задачи бесконечно.
Я думаю, что вас смущает в блоге эта строка:
Однако, если он еще не начал выполняться, Wait может
целевое задание из планировщика, к которому оно было поставлено в очередь, и выполнить
он встроен в текущий поток.
Ключевым моментом здесь является фраза "еще не начал выполняться". Это не означает, что Start()
не был вызван, но Start()
был вызван , который планирует задачу и готовит ее к выполнению, но задача еще не начала выполняться.
Start()
необходимо запланировать выполнение задачи, оно не сразу начинает выполнение. Это основной смысл этой рекламы. Если задача готова к выполнению, но не запланирована, она может быть встроена. Но это не запустит задачу, которая даже не была запланирована.
Если вы посмотрите на TaskStatus
в MSDN ( См. Здесь ), вы увидите следующие значения:
- Создано
- WaitingForActivation
- WaitingToRun
- Запуск
- WaitingForChildrenToComplete
- RanToCompletion
- Отменено
- Faulted
Когда вы создаете задачу (с новой или заводской), она находится в состоянии Created
. Ничего не происходит с задачей в этом состоянии. Как только он запущен, он переходит к WaitingForActivation
и так далее, в ЭТОЙ точке, пока не достигнет Running
, согласно этому блогу возможно, что он может быть встроен.
Итак, вкратце, создание задачи просто переводит ее в состояние Created
и не запускает ее, если вызывается Wait()
. Имеет смысл?