我正在将NServiceBus从较旧的版本升级到版本7。一半的代码已由较早的开发人员升级。该项目正在使用中介模式,一个订阅者项目中有许多处理程序。大多数处理程序都是异步的。
这些处理程序执行数据库更新,而其他一些处理程序执行数据库更新和Web服务调用。
在处理程序中,有许多用于执行数据库操作和Web服务调用的同步方法。
由于处理程序既是异步的又是同步的,如果使用此代码进入生产,我会遇到任何问题吗?
由于NServiceBus IHandleMessages<T>
强制处理程序执行此操作,因此处理程序必须返回Task(public Task Handle(T message, IMessageHandlerContext context)
。无论您在何处用async
标记并使用await
关键字,都取决于您的身份。如果您要调用任何异步操作(使用NSreviceBus,第三方异步代码发送或发布),则最好让数据库操作使用异步变体来最大化异步API的好处。
混合异步和非异步是可以的,只是不要忘记等待任何异步操作。