c# - NServiceBus 同时具有异步和同步处理程序
问题描述
我正在将 NServiceBus 从旧版本升级到版本 7。早期的开发人员已经升级了一半的代码。该项目使用调解器模式,并且在一个订阅者项目中有很多处理程序。大多数处理程序都是异步的。
这些处理程序执行数据库更新,而其他一些处理程序执行数据库更新和 Web 服务调用。
在处理程序中,有许多同步方法用于执行数据库操作和 Web 服务调用。
由于处理程序既是异步的又是同步的,如果我使用此代码进入生产环境,我会遇到任何问题吗?
解决方案
由于 NServiceBusIHandleMessages<T>
要求处理程序执行此操作,处理程序必须返回一个 Task ( public Task Handle(T message, IMessageHandlerContext context)
。无论您在哪里标记它async
并使用await
关键字将取决于您在做什么。如果您要调用任何异步操作操作(使用 NSreviceBus,第 3 方异步代码发送或发布)最好通过让数据库操作使用异步变体来最大化异步 API 的好处。
可以混合使用异步和非异步,只是不要忘记等待任何异步操作。
推荐阅读
- c++ - 使用编码器/解码器逻辑门规则在 C++ 中编码/解码数据
- postgresql - Google SQL 实例之间的跨数据库查询 (PostgreSQL)
- arrays - 如何通过将数组传递给 c# 中的函数来返回数组的单个索引?
- laravel - 通过关系表连接的 Laravel 模型
- c# - 在用户单击按钮后代表用户发送消息
- r - 如何在 tidyverse 中删除 tibble 中的重复列
- javascript - Google API Places - 来自城市的地址建议
- php - 未定义变量:标签,在引导模式上显示来自数据库的数据
- javascript - 提交后如何为所有表单输入保留会话存储?
- postgresql - PostGIS:线串长度