API задач - обработка уже завершенной задачи - PullRequest
0 голосов
/ 30 декабря 2010

Я делаю API и имею функцию, которая берет задачу и запускает ее. Когда задача успешно завершена, ее статус устанавливается на «Завершено». Теперь предположим, что пользователь API случайно (или по какой-либо причине) отправляет ту же задачу (или любую другую уже выполненную задачу) обратно в ту же функцию. Что должен делать API?

  • Брось исключение
  • Сделайте вид, будто я перезапустил задачу и сообщаю пользователю (через события или что-то еще), что оно выполнено / выполнено (снова).
  • Ничего не делай и просто игнорируй это.

Существует ли стандарт или лучшая практика для чего-то подобного?

1 Ответ

1 голос
/ 30 декабря 2010

При повторном запуске скрывается то, что, вероятно, является ошибкой пользователя - это может привести к взаимоблокировкам или другим логическим ошибкам (т. Е. - я создаю событие, жду его и запускаю задачу, которая должна сбросить его в какой-то момент - это никогда не происходит, тупик).Обработчики также могут завершиться с ошибкой, если их вызвать дважды за один успешный запуск задачи.

Ничего не делать более или менее одинаково - обработчики готовых действий не могут завершиться ошибкой :), но они вообще не вызываются - ошибкаболее вероятно, если обработчик выполнит необходимую связь с порождающим потоком.

Хуже всего - это может произойти или не произойти, в зависимости от времени.Т.е. задача может все еще выполняться к тому времени, когда пользователь вызывает функцию во второй раз (что вы делаете, кстати?)

Итак, выведите исключение, если состояние задачи не «не запущено»,Пользователь всегда может проверить статус и выполнить необходимую обработку в маловероятном случае, если он ему нужен.

...