Я слушаю сообщение об аппаратном событии, но мне нужно его отбросить, чтобы избежать слишком большого количества запросов.
Это аппаратное событие, которое отправляет состояние машины, и я должен хранить его в базе данных для статистических целей, и иногда случается, что его статус очень часто изменяется (мерцает?). В этом случае я хотел бы сохранить только "стабильный" статус, и я хочу реализовать его, просто дожидаясь 1-2 секунд, прежде чем сохранять статус в базе данных.
Это мой код:
private MachineClass connect()
{
try
{
MachineClass rpc = new MachineClass();
rpc.RxVARxH += eventRxVARxH;
return rpc;
}
catch (Exception e1)
{
log.Error(e1.Message);
return null;
}
}
private void eventRxVARxH(MachineClass Machine)
{
log.Debug("Event fired");
}
Я вызываю это поведение "debounce": подождите несколько раз, чтобы действительно выполнить свою работу: если одно и то же событие будет запущено снова во время debounce, я должен отклонить первый запрос и начать ждать времени debounce, чтобы завершить второе событие.
Каков наилучший способ управления? Просто одноразовый таймер?
Чтобы объяснить функцию "debounce", см. эту реализацию javascript для ключевых событий: http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/