A Task
может иметь или не иметь поток, но в вашем случае Task.Run
это должно быть.Вы можете ссылаться на сам Task
, и он будет существовать до тех пор, пока он находится в области действия, или вы сохраняете живую ссылку на него.Поток, с которым он работает, будет продолжаться до завершения кода.Это немного сбивает с толку, но знаю, что сам Task
и работающий поток разделены.Task
больше похож на состояние / менеджера некоторой работы, которая может быть или не быть в отдельном потоке.Эта ссылка может храниться до тех пор, пока приложение не прекратит работу, если это необходимо, где вы можете прочитать состояние работы, даже если она завершена.
Если Task
покидает область видимости и отсутствует ссылка, то отслеживаемая единица работы будет продолжена;однако сам Task
будет настроен для сборки мусора, когда это будет завершено.Другими словами, вы можете запустить и забыть Task
, если хотите, и если не возникнет ошибка или вы не завершите приложение, единица работы, назначенная для Task
, будет завершена.
Обратите внимание, что Task
завершится с вашим приложением, и если этот Task
вызовет новый поток, такой как вы делаете с Task.Run
, он также завершится с вашим приложением, если приложение завершится.