.net - 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 个并发调用)
它是否正确?
解决方案
处理器运行一组后台任务来接收消息,每个任务都独立工作。在您的示例中,因为MaxConcurrentCalls
是 3,您将同时运行 3 个任务。
每个任务都将调用您的ProcessMessageAsync
处理程序,这意味着您的处理程序也在同时执行。除非您使用共享资源或显式同步处理程序调用,否则阻止一个处理程序调用不会阻止其他处理程序调用。