.net 在CreateUsingInMemory总线崩溃应用程序上发布
下面的代码会使应用程序崩溃,不会捕获任何错误,并且在调用Publish时应用程序会简单地关闭。 我真正想做的是执行单元测试,这段代码只是为了提供一个清晰的示例而进行的抽象。当我将相应的代码作为单元测试运行时,会收到一条错误消息,表明线程正在中止。代码使用的是MassTransit nuget包的3.5.6版 有人能看出我做错了什么吗.net 在CreateUsingInMemory总线崩溃应用程序上发布,.net,masstransit,.net,Masstransit,下面的代码会使应用程序崩溃,不会捕获任何错误,并且在调用Publish时应用程序会简单地关闭。 我真正想做的是执行单元测试,这段代码只是为了提供一个清晰的示例而进行的抽象。当我将相应的代码作为单元测试运行时,会收到一条错误消息,表明线程正在中止。代码使用的是MassTransit nuget包的3.5.6版 有人能看出我做错了什么吗 using System; using System.Threading.Tasks; using MassTransit; namespace Customer
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");
}
}
}
使用系统;
使用System.Threading.Tasks;
使用大众运输;
名称空间CustomerService.Console
{
班级计划
{
公共静态void Main(字符串[]args)
{
Task.Run(()=>performmasstTransitTest()).GetAwaiter().GetResult();
}
公共静态异步void PerformAssessTransitTest()
{
var busControl=Bus.Factory.CreateUsingInMemory(配置=>
{
config.ReceiveEndpoint(“myQueue”,endpoint=>{endpoint.Consumer();});
});
尝试
{
等待busControl.StartAsync();
等待busControl.Publish(newtestmessage());
System.Console.ReadKey();
}
捕获(异常错误)
{
系统控制台写入线(错误);
}
System.Console.ReadLine();
}
}
公共类测试消息
{
}
公共类TestMessageConsumer:IConsumer
{
公共任务消费(消费上下文)
{
系统控制台写入线(“消费”);
返回Task.FromResult(“已消耗”);
}
}
}
为了正确等待异步方法,它必须返回任务
。由于您返回了void
,因此没有什么可等待的,因此线程将被释放。这与MassTransit无关,只是常规的异步/等待
当您更改返回任务的方法时,可以使用TaskUtil.Await(()=>performmasstTransitTest())简化调用代码>
根据单元测试,您可以使用总线线束测试耗电元件,如图所示。文档落后了,但即将发布。谢谢你,太好了,有时候你看不到森林里所有的树:)效果很好@如果你能接受并投票表决,那就太好了:)