Отменить запланированное задание

У меня есть приложение Windows Delphi, которое получает события, при каждом из которых я хотел бы запустить задачу параллельно (чтобы я мог быть готов к следующему событию). Есть много способов сделать это с помощью всевозможных абстракций библиотеки.

Проблема в том, что часть моего кода должна выполняться сразу после получения события (в основном для "декодирования" параметров событий), а другая часть должна выполняться через несколько секунд только при условии, что ничего нового не произойдет для тот же контекст. Это поведение должно реагировать на "сохранять новое значение только в том случае, если оно дольше 3000 мс, в противном случае просто отмените его". Так что мне нужно было бы "отменить" запущенную задачу (ожидающую 3000 мс), если новое событие приходит с тем же контекстом. Я не могу использовать конвейерную абстракцию, потому что, когда первый этап заканчивается, он автоматически заполняет очередь второго этапа, не спрашивая меня, хочу ли я отменить его или нет.

Это возможно?

Спасибо.

1 ответ

Решение

Похоже, вам нужно Dictionary<Context, Event> где события также несут "созданное" свойство временной метки и фоновый рисунок, который постоянно проверяет, есть ли записи событий в этом словаре с elapsed time > 3000ms, Входящие события обновляют метку времени и параметры события, пока поток не обнаружит запись, которая соответствует условию, а затем извлечет запись из словаря.

Другие вопросы по тегам