Thread
фактический поток, потенциально запущенный и запущенный по коду из вашего приложения.
async
- это просто ключевое слово C # (Async
в VB.NET), которое сообщает компилятору, что метод может стать продолжением. Обычно это происходит с ключевым словом await
, если найдено правильное значение TaskAwaiter
.
async await
- это НЕ то же самое, что Thread
, но использование двух часто имеет похожую логику.
С помощью Thread
вы можете ссылаться и вызывать его для выполнения любой делегированной работы. Поток будет работать до тех пор, пока делегированная работа не будет завершена или он не выдаст ошибку.
ПРИМЕЧАНИЕ. Ссылка на new Thread
отличается от ссылки на пул потоков приложений. Когда вы ссылаетесь на new Thread
, по умолчанию вы позволяете ему поддерживать ваш процесс в активном состоянии, даже если вы закрываете приложение (так что управляйте ими хорошо). В идеале большинство потоков приложений следует извлекать из пула потоков приложений. Потоки потоков работают лучше просто потому, что они обычно уже распределены и могут использоваться повторно; они также завершатся, когда закончится основной поток (поток приложения), что позволит завершить процесс.
Примеры new Thread
против ThreadPool
//Runs from application thread pool... Ends with process.
ThreadPool.QueueUserWorkItem((state) => { /* do some work */ });
//Allocates a new thread; by default runs until completed reaching UnhandledException keeping the process alive.
new Thread(new ThreadStart(() => { /* do some work */ })).Start();
Теперь мы можем сделать это с Task
, например, так:
//Runs from application thread pool... Ends with process.
new Task(() => { /* do some work */ }).Start();
Вы заметите, что Task
похож на ThreadPool.QueueUserWorkItem
в этом примере, и на самом деле они очень похожи на то, что они делают. Тем не мение; чтобы не слишком вас смущать, просто обратите внимание, что Task
НЕ обязательно должно быть нитью. В этом примере это так.