我们正在创建一个 WPF 应用程序,在该应用程序中,我们从不同的测试站执行 python 脚本并在其相应的输出面板中显示输出,要并行运行脚本,我们使用 Task,但是当我们从测试站并行运行脚本时,我们正在将其他站点的输出也获取到首先启动的站点中,我们使用以下代码,
private void ZmqStatusListener(string endPoint)
{
using (Context context = new Context())
{
StatusPort = string.Empty;
TestResultPort = string.Empty;
using (Socket server = context.Socket(SocketType.REP))
{
try
{
if (isStatusContextActive == false || isPortChanged == true)
{
server.Bind(endPoint);
isStatusContextActive = true;
}
}
catch (ZMQ.Exception ex)
{
if (ex.Errno != 100)
{
string IPCPort = _globalParameters.GlbParam.GlbParamIpcStartPort;
if (IPCPort == string.Empty)
{
IPCPort = "0";
}
if (endPoint == EditorConstants.PortAddress.PortPrefix + IPCPort)
{
StatusPort = endPoint;
TestReultError = EditorConstants.CommonMessageTypes.TestReultError + ex.Message + EditorConstants.CommonMessageTypes.StackTraceMessage + ex.StackTrace;
}
StopExecOfScript(default(object));
isCancelledtask = true;
ScriptStatusDesc = new ScriptStatusDesc()
{
Status = "Failed",
statusDescription = "Failed"
};
}
}
while (true)
{
string message = server.Recv(Encoding.UTF8);
UpdateTestResults(message);
server.Send(" ACK", Encoding.UTF8);
// if (message == "Test Passed")
//break;
}
}
}
}
出于测试目的,我们根据我们保存在 python 脚本中的测试消息打破了这段代码中的 while 循环,然后我们能够正确地在相应的站中获得输出,但是这样我们只能以同步方式运行这是我们不希望的,因为我们需要并行运行测试站,并且 while 循环不应中断,因为它应该正在侦听响应。