Как остановить выполнение триггера очереди в веб-задании 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