处理客户端对象时是否可以触发服务总线处理器?

Is it possible to trigger service bus processors when the client object is disposed?

我正在调用 ServiceBusClient.DisposeAsync 来处理客户端对象。但是,从该对象创建的处理器开始抛出异常,说明该对象已被处置并且无法再侦听。有什么方法可以在调用 dispose 时触发服务处理器的自动关闭?或者,我应该掌握从此客户端创建的所有处理器,然后停止监听吗?

简短的回答是否定的;处理器有意没有“处理时停止处理”行为。您的应用程序负责调用 StopProcessingAsync.

更多上下文:

ServiceBusClient 拥有由它派生的所有 child objects 共享的连接。 Closing/disposing 客户将有效处置其 children。如果您此时尝试调用服务操作,则会触发错误。

对于处理器,应用程序负责调用启动和停止。因为处理器被设计为具有弹性,它的目标是在遇到故障时继续恢复并继续尝试取得进展,直到调用停止。

虽然处理器确实理解一组已处置的网络资源是终端,但它无法理解您的意图。您的应用程序关闭 ServiceBusClient 是否是为了停止关联的处理器?它是否在没有意识到仍有处理器 运行ning 的情况下关闭了客户端?

因为意图不明确,所以只好走稳妥的路。处理器将继续 运行 因为它们会向您的应用程序的错误处理程序显示异常 - 这可确保您的应用程序知道存在问题并允许您以最适合您应用程序需求的方式做出响应。

另一方面,如果处理刚刚停止并且您不希望发生这种情况,您的应用程序将更难检测和修复。您只会知道处理器停止工作,如果不进行大量调查,您很可能无法理解原因。