У меня есть куча функций обработки очереди веб-заданий:
public static void ProcessSomething(
[QueueTrigger("testrequest")] TestThing thing,
TextWriter logger,
CancellationToken token)
Меня смущает изящное завершение работы. Таким образом, когда вы закрываете веб-задание (или повторно развертываете его), оно позволяет запустить и завершить текущую обработку веб-задания — по умолчанию у вашего обработчика очереди есть 5 секунд для завершения. Вы можете передать CancellationToken
методу для проверки запроса на отмену, если существует вероятность того, что выполнение веб-задания займет больше времени, как описано в разделе «Мягкое завершение работы» на эта статья.
Хорошо, но что странно, так это то, что я обнаружил, что когда обработчик очереди работает во время завершения работы, токен имеет установленное значение IsCancellationRequested
, но даже если функция завершается в течение, скажем, секунды, этот элемент очереди помечается как «Никогда». Finished», и через 10 минут (после истечения времени аренды для этого элемента очереди) он возвращается в очередь.
Это по дизайну? Могу ли я изменить это поведение? Если, например, ваш обработчик очереди отправлял электронное письмо и срабатывал во время выключения, то он отправит электронное письмо, затем будет помечен как не завершенное, а затем снова отправит электронное письмо через 10 минут.
Помощь!