.net ServiceBusProcessor是否使用线程池
这个问题是关于与.NET5一起使用的 当我这么做的时候.net ServiceBusProcessor是否使用线程池,.net,concurrency,azureservicebus,.net,Concurrency,Azureservicebus,这个问题是关于与.NET5一起使用的 当我这么做的时候 var processor = client1.CreateProcessor("queueName", new ServiceBusProcessorOptions { MaxConcurrentCalls = 3 }); processor.ProcessMessageAsync += ProcessMessageAsync; await processor.StopProcessingAsync();
var processor = client1.CreateProcessor("queueName",
new ServiceBusProcessorOptions { MaxConcurrentCalls = 3 });
processor.ProcessMessageAsync += ProcessMessageAsync;
await processor.StopProcessingAsync();
我假设它将在一个线程中运行,除非我在ProcessMessageAsync
?中的线程池中显式创建
Task
s
(如果其他2个调用被IO阻止并释放线程,则可以运行3个并发调用)
这是否正确?处理器运行一组后台任务来接收消息,每个任务独立工作。在您的示例中,因为
MaxConcurrentCalls
是3,所以您将有3个任务同时运行
每个任务都将调用您的
ProcessMessageAsync
处理程序,这意味着您的处理程序也将同时执行。除非您正在使用共享资源或显式同步处理程序调用,否则阻止一个处理程序调用不会阻止其他处理程序调用。谢谢!您能指出它在代码中创建任务的位置吗?正在尝试查找任务,但我只找到了一个基于MaxConcurrentCalls配置的信号量。很乐意。是非会话场景的核心。谢谢!我希望在某处找到newtask().Run()
。在runreceivetasksasync()
中,它从ReceiveAndProcessMessagesAsync()
中检索任务,然后ReceiveAndProcessMessagesAsync()
->ProcessOneMessageWithinScopeAsync()
ProcessOneMessage()
OnMessageHandler()
我没有看到Task.Run()
此调用堆栈中的任意位置。是什么使它并发?调用ReceiveAndProcessMessagesAsync
时,不会等待任务。每个调用都会启动一个本身是异步的操作。由于这些任务的结构和依赖性,它们不太可能同步完成,因此当任务在后台运行到完成时,每个任务都将启动并控制调用方的返回。\u messageHandlerSemaphore
通过限制在任何时候都可以活动的任务数量来确保遵守最大并发调用值。我明白了,因此它不使用线程池,也不使用多个线程,如果我想使用Task.Run()
在ProcessMessageAsync
处理程序中的我的代码中?