Один из возможных маршрутов, который вы можете изучить:
Вы можете настроить таблицу базы данных для отслеживания хода выполнения задачи.Может быть, имя таблицы «задача» со столбцами «имя задачи» и «inProgress», причем последнее является логическим значением.Когда задача запускается, установите inProgress в значение true.Когда он завершится, задайте для inProgress значение false.
В шаблоне, вызываемом запланированной задачей, сначала проверьте его состояние inProgress указанной задачи.Если это правда, просто прервите.В противном случае продолжите.
РЕДАКТИРОВАТЬ:
Хмм ... это на самом деле не будет работать лучше, чем переменные вашего приложения в случае тайм-аутов или ошибок.Так что теперь думая, что вместо логического, вы используете метку времени.Когда запланированная задача сработает, обновите значение с текущим временем.Когда он завершится, очистите его.
Поэтому, когда задача запускается снова, она увидит, что предыдущая задача либо завершена (нулевое значение), либо все еще выполняется.-Если это все еще в процессе, вы можете сделать dateDiff () для значения, чтобы увидеть, было ли это больше, чем 'x' минут назад.Если это так, вы можете предположить, что предыдущая задача вышла из строя (или по ошибке ... но в этом случае я думаю, что вы могли бы поместить некоторую обработку ошибок в саму задачу) и запустить текущий экземпляр задачи.