首页 > 解决方案 > ServiceBusProcessor 是否使用线程池

问题描述

问题是关于Azure.Messaging.ServiceBus v7.1.1 中的 ServiceBusProcessor与 .NET 5 一起使用

当我这样做时

var processor = client1.CreateProcessor("queueName", 
    new ServiceBusProcessorOptions { MaxConcurrentCalls = 3 });
processor.ProcessMessageAsync += ProcessMessageAsync;
await processor.StopProcessingAsync();

我假设它将全部在 1 个线程中运行,除非我Task在线程池中显式创建 s ProcessMessageAsync
(如果其他 2 个调用被 IO 阻塞并释放线程,则可以运行 3 个并发调用)

它是否正确?

标签: .netconcurrencyazureservicebus

解决方案


处理器运行一组后台任务来接收消息,每个任务都独立工作。在您的示例中,因为MaxConcurrentCalls是 3,您将同时运行 3 个任务。

每个任务都将调用您的ProcessMessageAsync处理程序,这意味着您的处理程序也在同时执行。除非您使用共享资源或显式同步处理程序调用,否则阻止一个处理程序调用不会阻止其他处理程序调用。


推荐阅读