【发布时间】:2023-03-30 13:54:01
【问题描述】:
是否存在在处理程序中运行异步操作是合理的情况? 例如:
public class H1 : IMessageHandler<MyMessage>
{
public async void Handle(MyMessage message)
{
await SendTxt(message);
await SendEmail(message);
}
}
【问题讨论】:
-
您的问题是否与“NServiceBus 是否支持异步处理程序?”相同?
-
或多或少。据我了解, NServiceBus 管理自己的线程。我想知道的是我是否应该避免在处理程序中旋转更多线程(如果是,那么为什么)或者它是否完全合法。
-
我不知道答案,但我想确保您了解一件事:异步、等待和异步 IO 都不会启动或阻塞线程。或许这是对你的误解。
-
@usr 没有显式创建其他线程,但这种更改可能会导致以前不存在的并行性。例如,如果事件处理程序在所有先前的处理程序完成之前不会触发,那么拥有同步处理程序将隐式同步代码,并使它们异步将隐式并行化它们。一些延续也可以在线程池线程中运行(同样,如果没有同步上下文),上下文可能不支持。
标签: c# .net queue nservicebus