以下代码只是崩溃应用程序,没有捕获错误,应用程序只是在调用发布时关闭。 我真正想做的是执行单元测试,这个代码只是抽象的,以提供一个干净的例子。当我将相应的代码作为单元测试运行时,我得到一个错误消息,说该线程正在中止。该代码使用的是MassTransit nuget软件包的3.5.6版本。
谁能看到我做错了什么?
using System;
using System.Threading.Tasks;
using MassTransit;
namespace CustomerService.Console
{
class Program
{
public static void Main(string[] args)
{
Task.Run(() => PerformMassTransitTest()).GetAwaiter().GetResult();
}
public static async void PerformMassTransitTest()
{
var busControl = Bus.Factory.CreateUsingInMemory(config =>
{
config.ReceiveEndpoint("myQueue", endpoint => { endpoint.Consumer<TestMessageConsumeer>(); });
});
try
{
await busControl.StartAsync();
await busControl.Publish(new TestMessage());
System.Console.ReadKey();
}
catch (Exception err)
{
System.Console.WriteLine(err);
}
System.Console.ReadLine();
}
}
public class TestMessage
{
}
public class TestMessageConsumeer : IConsumer<TestMessage>
{
public Task Consume(ConsumeContext<TestMessage> context)
{
System.Console.WriteLine("Consuming");
return Task.FromResult("Consumeed");
}
}
}
答案 0 :(得分:0)
为了正确等待异步方法,它必须返回Task
。由于您返回void
,因此无需等待线程处理。这与MassTransit无关,只是常规的async / await事件。
当您将方法更改为返回任务时,您可以使用TaskUtil.Await(() => PerformMassTransitTest());
根据单元测试,您可以使用总线线束来测试您的消费者,就像它显示here一样。文档滞后,但它即将到来。