Azure.Messaging.ServiceBus:我应该在处理时从 ServiceBusProcessor 中删除 ProcessMessageAsync 处理程序吗?

Azure.Messaging.ServiceBus: should I remove ProcessMessageAsync handler from ServiceBusProcessor on disposing?

我正在使用 Azure.Messaging.ServiceBus 库。

我创建了 ServiceBusClientServiceBusProcessor 来开始接收这样的队列消息:

var serviceBusClient = new ServiceBusClient(connectionString);
ServiceBusProcessor processor = serviceBusClient.CreateProcessor(queue);
processor.ProcessMessageAsync += HandleEvent;
processor.StartProcessingAsync();

在应用程序关闭时,我以这种方式处理 ServiceBusClientServiceBusProcessor

processor.ProcessMessageAsync -= HandleEvent; // Is this needed?
await processor.DisposeAsync();
await serviceBusClient.DisposeAsync();

我是否需要明确删除 HandleEvent,或者 processor.DisposeAsync() 应该对此负责?

我找不到 processor.DisposeAsync() 正在删除其代码中的任何处理程序,但是,可能是因为根本不需要删除处理程序?官方文档似乎也缺少任何关于如何正确处理 ServiceBusProcessor 实例的好例子。

难道根本不需要 await processor.DisposeAsync(),因为 serviceBusClient.DisposeAsync() 应该可以完成所有工作吗?

Can it be that await processor.DisposeAsync() is not needed at all, since serviceBusClient.DisposeAsync() should do all the job?

是的,不需要 await processor.DisposeAsync(),因为调用 serviceBusClient.DisposeAsync()CloseAsync 应该可以完成所有工作,并将确保正确清理网络资源和其他非托管对象。

而且当 ServiceBusClient 实例被 处置 时,它会自动关闭并清理任何发送者、接收者和 处理器 使用它创建的。