首页 > 解决方案 > NServiceBus 同时具有异步和同步处理程序

问题描述

我正在将 NServiceBus 从旧版本升级到版本 7。早期的开发人员已经升级了一半的代码。该项目使用调解器模式,并且在一个订阅者项目中有很多处理程序。大多数处理程序都是异步的。

这些处理程序执行数据库更新,而其他一些处理程序执行数据库更新和 Web 服务调用。

在处理程序中,有许多同步方法用于执行数据库操作和 Web 服务调用。

由于处理程序既是异步的又是同步的,如果我使用此代码进入生产环境,我会遇到任何问题吗?

标签: c#.netweb-servicesnservicebushttphandler

解决方案


由于 NServiceBusIHandleMessages<T>要求处理程序执行此操作,处理程序必须返回一个 Task ( public Task Handle(T message, IMessageHandlerContext context)。无论您在哪里标记它async并使用await关键字将取决于您在做什么。如果您要调用任何异步操作操作(使用 NSreviceBus,第 3 方异步代码发送或发布)最好通过让数据库操作使用异步变体来最大化异步 API 的好处。

可以混合使用异步和非异步,只是不要忘记等待任何异步操作。


推荐阅读