提问人:Kodo 提问时间:11/17/2023 最后编辑:jpsKodo 更新时间:11/17/2023 访问量:26
异步 NetMQ 抛出“在调用异步函数之前必须创建 NetMQRuntime”
Async NetMQ throws "NetMQRuntime must be created before calling async functions"
问:
我有两个使用 NetMQ (v4.0.1.13) 的 .Net 7 控制台应用程序,并且它们都有类似的程序类 - 只是异步任务不同:
class Program
{
private static readonly CancellationTokenSource cts = new();
static void Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
var runtime = new NetMQRuntime();
runtime.Run(cts.Token, <async client | server task here>);
}
private static void CurrentDomain_ProcessExit(object? sender, EventArgs e)
{
try
{
cts.Cancel();
}
catch { }
finally
{
NetMQConfig.Cleanup();
}
}
}
“客户端”具有以下特征:
using var requestSocket = new RequestSocket();
requestSocket.Connect("tcp://localhost:5555");
...
requestSocket.SendMultipartMessage(newBlockMessage); // Step 1
// This line throws the "NetMQRuntime must be created before calling async functions" exception!
var result = await requestSocket.ReceiveFrameStringAsync(); // Step 4
“server”包含以下行:
using var responseSocket = new ResponseSocket();
responseSocket.Bind("tcp://localhost:5555");
...
NetMQMessage messages = await responseSocket.ReceiveMultipartMessageAsync(); // Step 2
...
//This line results in the client exception above
ResponseSocket.SendFrame(SystemEvent.EventTypes.NewBlockAndTransferEventStored.ToString()); // Step 3
我已经为此苦苦挣扎了一段时间,无法理解客户端和服务器的程序类中的初始化代码有什么不同。我将消息流概述为“步骤 (n)”,以阐明消息交换。感觉就像我在客户端初始化中缺少一些非常基本的东西,但我无法识别它。 由于未知的原因,“服务器”应用程序似乎可以很好地处理 aync(它没有抱怨),而“客户端”在接收“服务器”回复的步骤 4 中抛出异常。
答: 暂无答案
评论