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