Отменить запланированное задание
У меня есть приложение Windows Delphi, которое получает события, при каждом из которых я хотел бы запустить задачу параллельно (чтобы я мог быть готов к следующему событию). Есть много способов сделать это с помощью всевозможных абстракций библиотеки.
Проблема в том, что часть моего кода должна выполняться сразу после получения события (в основном для "декодирования" параметров событий), а другая часть должна выполняться через несколько секунд только при условии, что ничего нового не произойдет для тот же контекст. Это поведение должно реагировать на "сохранять новое значение только в том случае, если оно дольше 3000 мс, в противном случае просто отмените его". Так что мне нужно было бы "отменить" запущенную задачу (ожидающую 3000 мс), если новое событие приходит с тем же контекстом. Я не могу использовать конвейерную абстракцию, потому что, когда первый этап заканчивается, он автоматически заполняет очередь второго этапа, не спрашивая меня, хочу ли я отменить его или нет.
Это возможно?
Спасибо.
1 ответ
Похоже, вам нужно Dictionary<Context, Event>
где события также несут "созданное" свойство временной метки и фоновый рисунок, который постоянно проверяет, есть ли записи событий в этом словаре с elapsed time > 3000ms
, Входящие события обновляют метку времени и параметры события, пока поток не обнаружит запись, которая соответствует условию, а затем извлечет запись из словаря.