.Net многопоточность: спать, ждать, прерывать, присоединиться - PullRequest
1 голос
/ 17 июля 2011

Я запутался в том, что когда их использовать .. Я знаю, что все эти методы делают блок потоков.

Так, каковы их конкретные случаи использования.

Также, что является предпочтительным методомof Wait () .. (как ТОЛЬКО в ManualResetEvent?)

Ответы [ 2 ]

3 голосов
/ 17 июля 2011

Сон: я не рекомендую использовать это, если это не фоновый поток, который делает постоянный опрос, поскольку он может маскировать условия гонки.Возвращает временной интервал для МИНИМУМА отправленного ему параметра, временные кванты в ОС определяют фактическую гранулярность (которая может быть больше времени, чем вы говорите)замок.Он помещает процессор в небольшой цикл (обычно 2 инструкции), в основном это спящий режим, который блокирует поток, но продолжает выполнять вместо выдачи своего временного интервала.В качестве альтернативы может использоваться WaitOne, который ожидает на WaitHandle для получения сигнала.В этом случае поток ожидает до количества времени, указанного для получения сигнала, а затем разблокируется, или вы можете ждать до тех пор, пока сигнал не будет получен (может использоваться для реализации тайм-аутов при асинхронных операциях, также имеет другое использование)

Прерывание: прерывание потока, находящегося в состоянии ожидания, ожидания или блокировки.

Присоединение: присоединение потока к текущему контекстному потоку и разблокировка после завершения присоединенного потока, используется для ожиданиячто-то, чтобы закончить, что нужно, чтобы продолжить

2 голосов
/ 17 июля 2011

Существует отличная бесплатная электронная книга Джозефа Албахари, автора LINQPad и нескольких бестселлеров C #, на Threading в C # . Если вы приложите некоторые усилия для изучения этого материала, ваше замешательство должно исчезнуть ...

...