Как остановить выполнение триггера очереди в веб-задании Azure

У меня лазурная веб-работа, где есть функция, запускаемая лазурной очередью

 public class Functions
 {
     public static void ProcessQueueMessage([QueueTrigger("scannedcodes")] string message, TextWriter log)
     {
         // do something
     }
 }

В этом приложении также есть таймер с интервалом в 5 минут. Когда запускается событие Elapsed таймера, мне нужно что-то сделать в обработчике событий, который требует, чтобы метод, запускаемый очередью, не работал.

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

1 ответ

Я хотел бы взглянуть на методы взаимосвязанного увеличения и уменьшения, чтобы поддерживать текущее общее количество активных процессов. В первой строке вашего метода вызовите Increment, а в последней строке вызовите Decrement. Когда срабатывает событие таймера, проверьте текущее значение счетчика и либо дождитесь, пока оно станет равным 0, либо ничего не делайте.

https://msdn.microsoft.com/en-us/library/system.threading.interlocked_methods(v=vs.110).aspx

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