【发布时间】:2019-11-20 08:03:35
【问题描述】:
我用我的 NetMQ 实现创建了一个 Gist,因为我觉得在这里粘贴有点多:https://gist.github.com/gthvidsten/e626d7e6c51012b1ba152d22e034d93d
如果我在 .Net Core 控制台应用程序中执行以下操作,一切正常,我会收到 MessageReceived 事件:
static void Main(string[] args)
{
_transportWithHost = new NetMqTransport(
"tcp://localhost:9990",
"tcp://localhost:9991",
true);
_transportWithHost.Start();
Console.WriteLine("Press [Enter] to publish");
Console.ReadLine();
_transportWithHost.MessageReceived += (sender, e) =>
{
; // Breakpoints here are hit
};
_transportWithHost.Publish(new byte[] { 1, 2, 3, 4 });
Console.WriteLine("Press [Enter] to exit");
Console.ReadLine();
}
但是,如果我尝试在 NUnit 测试环境中做同样的事情,MessageReceived 事件将永远不会触发!
class NetMqTransportTests
{
private NetMqTransport _transportWithHost;
[OneTimeSetUp]
public void Setup()
{
_transportWithHost = new NetMqTransport(
"tcp://localhost:9990",
"tcp://localhost:9991",
true);
_transportWithHost.Start();
}
[Test]
public void PublishTest()
{
ManualResetEvent mre = new ManualResetEvent(false);
_transportWithHost.MessageReceived += (sender, e) =>
{
mre.Set();
// Breakpoints here are never hit as MessageReceived is never called
};
_transportWithHost.Publish(new byte[] { 1, 2, 3, 4 });
bool eventFired = mre.WaitOne(new TimeSpan(0, 0, 5));
Assert.True(eventFired);
}
}
为什么几乎相同的代码在控制台应用程序中有效,但在 NUnit 环境中无效?
【问题讨论】:
标签: c# .net-core nunit zeromq netmq