mon*_*tro 0 nservicebus async-await
在一个文档中,他们说 IHandleMessages 处理程序必须以这种方式编写(当我在 Visual Studio 中选择“实现接口”选项时会自动生成签名):
public class PlaceOrderHandler : IHandleMessages<PlaceOrder>
{
public Task Handle(PlaceOrder message, IMessageHandlerContext context)
{
var orderPlaced = new OrderPlaced { OrderId = message.OrderId };
return context.Publish(orderPlaced);
}
}
Run Code Online (Sandbox Code Playgroud)
而另一个文档说它必须这样写:
public class PlaceOrderHandler : IHandleMessages<PlaceOrder>
{
public async Task Handle(PlaceOrder message, IMessageHandlerContext context)
{
var orderPlaced = new OrderPlaced { OrderId = message.OrderId };
await context.Publish<OrderPlaced>(e => { e.OrderId = message.OrderId; });
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道这两个陈述有什么区别,有人可以用简单的语言解释一下吗?
哪个选项是正确的?
两者都是正确的选择。两者之间的区别在于方法中如何处理单个异步操作Handle。
在第一种情况下, aTask按原样返回。在第二种情况下,在Handle方法中等待发布。区别?在第一种情况下,当发布任务返回时,编译器不会创建异步状态机。在第二个场景中,创建了一个状态机。
哪个选项适合使用?他们都是正确的选择。如果一个方法被频繁调用并且您关心不发生不必要的分配,那么不等待就返回单个任务会更有效。
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |