2

У меня есть QueueClient, который получает сообщения из служебной шины и порождает потоки, обрабатывающие эти сообщения.Как узнать текущее количество потоков в Azure?

var options = new OnMessageOptions(); 
options.MaxConcurrentCalls = 10; 

// Use of Service Bus OnMessage message pump. 
_client.OnMessageAsync(
    async (msg) => 
    { 
     // Will block the current thread if Stop is called. 
     await ProcessMessageAsync(processStream, msg); 
    }, 
    options); 

Я знаю, что максимальное количество потоков, которое может быть создано, равно 10, как указано в параметрах. Есть ли способ узнать, сколько потоков существует ТОЛЬКО?

Бонусный вопрос: возможно ли отслеживать использование памяти этими потоками (индивидуальными или коллективными)?

Благодаря

+0

Сколько потоков * где *? В вашем приложении на виртуальной машине приложение работает, сколько потоков обрабатывает сообщения? –

ответ

1

значения, указанным в опции MaxConcurrentCalls не приравнивает к выделенным потокам, работающим в этом процессе. Он показывает, сколько параллельных асинхронных запросов приема помещено в очередь на службу службы шины. После завершения асинхронных запросов результат обрабатывается в потоке обратного вызова. Если в очереди много сообщений, и вы указали MaxConcurrentCalls = 10, тогда теоретически может существовать до 10 потоков, вызывающих OnMessageAsync.

+0

Я знаю об этом - вопрос в том, можно ли получить текущее количество потоков, вызывающих OnMessageAsync() в любой момент времени – iliaden

+0

Один из способов сделать это - добавить счетчик производительности в OnMessageAsync, которые получают приращение при каждом вызове, назовите его «Inflight OnMessage Calls». Уменьшите этот счетчик перед тем, как покинуть метод. –