在一个文档中,他们说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);
}
}
虽然另一份文件说它必须以这种方式编写:
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; });
}
}
我想知道这两个陈述之间有什么区别,有人可以用简单的语言解释吗?
哪个选项是正确的?
答案 0 :(得分:4)
两者都是正确的选择。两者之间的区别在于如何在Handle
方法中处理单个异步操作。
在第一种情况下,按原样返回Task
。在第二种情况下,等待Handle
方法中的发布。区别?在第一种情况下,编译器没有创建异步状态机作为发回的任务返回。在第二种方案中,创建状态机。
哪个选项适合使用?它们都是正确的选择。如果频繁调用方法并且您不关心不必要的分配,则在不等待的情况下返回单个任务会更有效。