Привет,
Во время разработки моего приложения я использовал Поток. Сон, чтобы дать нашим внешним устройствам некоторое время для корректировки к настройкам прежде, чем сделать запросы, поскольку они являются довольно старыми и медленными.
Я теперь хочу заменить их чем-то немного более стильным и корректным.
Делает у любого есть простой способ "ожидать" устройства, а не сна, принимая во внимание, что устройство не сообщает нам, когда это готово, таким образом, ожидание почти так хорошо, как мы можем сделать!??
С уважением, George.
Возможно, лучше использовать таймер для периодического пробуждения и проверки готовности устройства.
У вас есть как минимум два варианта: System.Timers.Timer
или System.Threading.Timer
.
Однако это, вероятно, означает, что вам придется больше участвовать в многопоточности, чтобы таймер мог уведомить остальную часть вашей программы о продолжении работы, когда устройство будет готово (например, с помощью WaitHandle
или что-то вроде AutoResetEvent
).
Нет ничего принципиально неправильного в использовании Thread.Sleep
для блокировки единственного синхронного потока IMHO.
Лучший способ заставить приложение ждать - это использовать Thread.Sleep ()
Конечно, у вас есть реальная проблема, когда вам нужно выбрать произвольную шкалу времени для ожидания обновления устройства. .
Есть ли способ, которым ваше приложение может попытаться продолжить и повторить попытку, если это не удается из-за состояния устройства? (Конечно, должно быть максимальное количество повторных попыток)
До тех пор, пока вы выполняете вызовы из фонового потока, это, вероятно, не является ужасным способом сделать это. Вы могли бы также использовать таймер для обратного вызова через определенный интервал времени; более сложный (не намного), но, возможно, более простой для отмены (конечно, вы также можете просто обработать прерывание потока для отмены сна).
Я предпочитаю использовать 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