Поиск простой альтернативы Потоку. Сон

Привет,

Во время разработки моего приложения я использовал Поток. Сон, чтобы дать нашим внешним устройствам некоторое время для корректировки к настройкам прежде, чем сделать запросы, поскольку они являются довольно старыми и медленными.

Я теперь хочу заменить их чем-то немного более стильным и корректным.

Делает у любого есть простой способ "ожидать" устройства, а не сна, принимая во внимание, что устройство не сообщает нам, когда это готово, таким образом, ожидание почти так хорошо, как мы можем сделать!??

С уважением, George.

7
задан PeeHaa 3 November 2013 в 17:45
поделиться

4 ответа

Возможно, лучше использовать таймер для периодического пробуждения и проверки готовности устройства.

У вас есть как минимум два варианта: System.Timers.Timer или System.Threading.Timer .

Однако это, вероятно, означает, что вам придется больше участвовать в многопоточности, чтобы таймер мог уведомить остальную часть вашей программы о продолжении работы, когда устройство будет готово (например, с помощью WaitHandle или что-то вроде AutoResetEvent ).

Нет ничего принципиально неправильного в использовании Thread.Sleep для блокировки единственного синхронного потока IMHO.

7
ответ дан 6 December 2019 в 21:11
поделиться

Лучший способ заставить приложение ждать - это использовать Thread.Sleep ()

Конечно, у вас есть реальная проблема, когда вам нужно выбрать произвольную шкалу времени для ожидания обновления устройства. .

Есть ли способ, которым ваше приложение может попытаться продолжить и повторить попытку, если это не удается из-за состояния устройства? (Конечно, должно быть максимальное количество повторных попыток)

1
ответ дан 6 December 2019 в 21:11
поделиться

До тех пор, пока вы выполняете вызовы из фонового потока, это, вероятно, не является ужасным способом сделать это. Вы могли бы также использовать таймер для обратного вызова через определенный интервал времени; более сложный (не намного), но, возможно, более простой для отмены (конечно, вы также можете просто обработать прерывание потока для отмены сна).

1
ответ дан 6 December 2019 в 21:11
поделиться

Я предпочитаю использовать Monitor.Wait вместо Thread.Sleep в большинстве случаев, потому что в отличие от Thread.Sleep его можно разблокировать с помощью Monitor.Pulse, если потребуется. Хорошее объяснение того, почему Thread.Sleep следует использовать разумно, можно найти в http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx

3
ответ дан 6 December 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: