我是创建线程的新手,所以我尝试了一些代码,它似乎有效。我们有一个连接到成像设备的wpf客户端接口。我们将数据从接口传输到中央服务器进行存储。外部程序员告诉我,在嵌入式系统上创建一个匿名线程并不是一个好主意。但我无法弄清楚原因。
以下是我的代码片段。
new Task(() =>
{
using (TCPconnector = new TcpClient(App.CT.CTIpAddress, Convert.ToInt32(App.CT.CTIpPort)))
{
try
{
using (stream = TCPconnector .GetStream())
{
writer = new BinaryWriter(stream);
writer.Write(deviceCT);
}
}
catch (Exception ex)
{
Logger.Log.Instance.LogFiles["Client"].Add(ex.ToString(), Logger.Log.Status.Exception);
}
finally
{
if (stream != null) stream.Close();
if (TCPconnector != null) TCPconnector .Close();
if (writer != null) writer.Close();
}
}
}).Start();
他说理论上我可以调用函数内联而不是将它们声明为Task方法。因为我想要关闭的唯一原因是,如果我认为套接字调用将花费太长时间并阻止当前线程(如果它是一个UI线程)。我认为它实际上会阻止。
我认为因为它在UI线程上需要在后台线程上执行。 TCP连接失败可能需要很长时间(在UI挂起时间内)才能超时。
那么,为什么匿名线程在嵌入式系统上不是一个好主意?
答案 0 :(得分:0)
使用Slugster的评论:
外部开发人员在技术上可能是正确的,因为您没有在物理映像设备上运行匿名线程,因此将该语句应用于您的代码是不正确的。
从长远来看,开发人员和我停战并且代码保留在客户端计算机上。他担心如果它自己移动到成像设备上(独立运行)那么我们就会遇到问题。
使用VS逐步执行代码对这个匿名线程没有任何问题。
祝你好运。