Как правильно ждать запуска потока.NET?
Я читал следующее на веб-сайте Microsoft в рамках их учебника по потокам:
http://msdn.microsoft.com/en-us/library/aa645740%28v=vs.71%29.aspx
MSDN предлагает использовать следующее, чтобы дождаться оживления потока:
while (!oThread.IsAlive);
Это рекомендуемый способ ожидания? Было бы лучше вставить вызов "DoEvents", чтобы основной поток оставался отзывчивым? Как следует обрабатывать ошибки, если что-то идет не так, и поток никогда не "оживает"? Если это плохая практика, когда лучше всего использовать IsAlive?
Несколько модераторов отметили это как дубликат, но в другом вопросе, на который они ссылаются, ничего не говорится о IsAlive, DoEvents или правильной обработке ошибок, если поток не запускается. Мой вопрос конкретно связан со статьей MSDN, на которую я ссылался в моем вопросе, и с предложением использовать занятый цикл с IsAlive.
2 ответа
Поскольку пока нет официального ответа... То, что вы видели на MSDN, относится к 2003 году, это относительно старая технология. Для того, что вы хотите сделать, я бы использовал Task Parallel Library (TPL). Для этого требуется.NET Framwork 4.0+.
Для хорошего учебника о том, как использовать TPL для того, что вам нужно, смотрите:
Как только вы освоитесь с TPL, не стесняйтесь возвращаться и искать конкретные вопросы.
Надеюсь, это поможет.
В дополнение к ответу Killercam я хочу отметить, что пример кода на связанной странице является мусором. Похоже, кому-то сказали "создайте образец, который просто показывает все различные методы, которые мы имеем на одной странице". И это буквально так вышло...
При выполнении потоков вы почти никогда не ждете в цикле опроса. Особенно в тесном с любым ожиданием. Они нагревают процессор, ненадежны, имеют большую задержку, если вы усыпляете и есть просто лучшие способы сделать это. Спин-петли предназначены для экспертов, которые знают, что они делают в очень специфических случаях.
Нет смысла ждать, пока Нить станет "живой". Зачем кому-то делать это в реальном коде? Это даже не означает, что ваш процесс потока начал выполняться (на самом деле! Это не так.).
Я рекомендую вам использовать современные парадигмы. TPL - хорошее место для начала. Смотрите ответ Killercam.