У меня возникают проблемы со всеми возможными текущими и устаревшими способами реализации метода, который постоянно выполняется в фоновом режиме для получения данных, которые затем отображаются в пользовательском интерфейсе.Цикл сбора данных с использованием оператора таймера/задачи/фона
Вообще говоря, я наткнулся на использование async/await
in this answer, а также про различные таймеры in this answer.
Мой сценарий следующий: я хочу читать данные каждые 250 мс и обновлять свой пользовательский интерфейс на основе полученных данных. Наивный подход был бы очень простой вызов, как это:
while (true) {
// do stuff
Thread.Sleep(250);
}
Этот код не будет называться каждые 250мс в зависимости от того, как долго выполнение в теле на самом деле взял! Кроме того, в отличие от ответа на конкретный таймер, я не хочу дождаться завершения этого метода, чтобы вызвать его снова, поэтому, если метод окажется слишком длинным для одного тика, я все равно хочу называть его каждые 250 мс как можно точнее и прерывать при необходимости, предыдущее выполнение галочки.
Должен ли я использовать общий Timer
, a DispatcherTimer
, a Task
и т. Д.? У вас есть дополнительные ссылки и связанные с ними вопросы, которые актуальны?
В методе 'async' вы можете попробовать' await Task.Delay (250) '. – devRicher
Итак, если метод занимает больше 250 мс, вы хотите прервать и запустить новый прогон. Но если многие звонки занимают больше 250 мс, у вас не будет доработок. Я не вижу, как вы хотите добиться результата в таких случаях, как 250 мс. –
Метод не предназначен для возврата результата в конце, но меньших результатов во время выполнения. Кроме того, в моем конкретном случае использования метод будет занимать дольше 250 мс в очень исключительных ситуациях, когда система имеет своего рода отставание/hickup. Я получаю данные в порядке, где могу сказать, что результаты на раннем этапе вызова более важны, чем те, которые в конце, поэтому я хочу, чтобы первые куски чаще обновлялись в ситуации, когда метод не заканчивается. - Есть ли у вас идеи о совершенно разных подходах к этому? –