#c_sharp #net #многопоточность #tpl
Вроде, они предоставляют схожий функционал.
Ответы
Ответ 1
Это совсем разные вещи. Thread представляет собой физический, системный поток выполнения (за исключением SQL Server под .NET 2.0, да). А Task — это штука, которая по сути перепрыгивает из потока в поток, а зачастую и вовсе не находится ни в каком потоке! В результате у вас может быть всего 10 активных потоков, но тысячи Task'ов. Например, если вы делаете await на операцию чтения из сети, то он время ожидания прихода ответа от сервера ваша асинхронная функция вовсе не занимает никакого потока, а существует в спящем виде как обыкновенный объект где-то в памяти. Когда ответ реально приходит, функция находит какой-то поток (при обычных условиях это главный поток, но может быть и какой-то посторонний, если вы попросите), и продолжает выполнение на нём дальше. Для текущей версии языка имеет смысл почти всегда предпочитать Task'и и избегать Thread'ов, они слишком низкоуровневые. Пользуйтесь Task'ами, они умеют намного больше. Мне, например, за последний год пришлось использовать Thread только один раз (вот код), да и то в качестве дополнительного «хоста» для Task'ов. Необходимость была обусловлена тем, что мне нужен был STA apartment, а потоки из пула таковым не обладают.Ответ 2
Я вырос из мира микроконтроллеров. И в этом мире была такая штука как кооперативная ОС. Так вот эти task и await очень похожи на кооперативную ОС.
Комментариев нет:
Отправить комментарий