这两个nservicebus语句之间的区别是什么

时间:2018-03-29 14:58:46

标签: async-await nservicebus

在一个文档中,他们说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; });

    }
}

我想知道这两个陈述之间有什么区别,有人可以用简单的语言解释吗?

哪个选项是正确的?

1 个答案:

答案 0 :(得分:4)

两者都是正确的选择。两者之间的区别在于如何在Handle方法中处理单个异步操作。

在第一种情况下,按原样返回Task。在第二种情况下,等待Handle方法中的发布。区别?在第一种情况下,编译器没有创建异步状态机作为发回的任务返回。在第二种方案中,创建状态机。

哪个选项适合使用?它们都是正确的选择。如果频繁调用方法并且您不关心不必要的分配,则在不等待的情况下返回单个任务会更有效。