我有一个关于TCP连接类I问题的问题。
我已编写的连接类可以通过TCP建立连接。它从两个不同的线程侦听并写入该连接。现在我想改进那个班级。
我想完全异步建立此连接,以便在我的应用程序中的其他内容准备好的同时建立连接。 但我有一些其他类需要已建立的连接才能正常工作。所以,我的问题是,有人可以用一个小例子向我解释如何建立连接异步,并且在建立连接后其他类可能会开始工作吗?
我的第一个想法是在连接TCP客户端之后触发一个事件但是我遇到了这样一个事实,即如果远程服务器发回消息,则连接完全建立。 之后,我有了创建连接状态的想法。但现在我不知道如何继续前进。
如果不是如何使用等待和异步的方式,请告诉我。
提前致谢, 帕特里克
感谢您的回答。澄清我要更新帖子的内容。
当有人要求我到目前为止,我在GitHub发布了我的源代码。在Line 46中,我将连接状态设置为“正在连接”。建立TCP连接后,我将状态更改为“提取”(L155)。现在我必须等待表明连接已完全准备好的消息。消息传来之后,我预计我会将State设置为Open(L315)并触发ConnectionEstablished事件。
请原谅但我不能发布2个以上的链接。
答案 0 :(得分:0)
我的意思是:而不是使用线程块;使用ManualresetEvent为TCP连接编写一个Task。使Thread的另一部分基于ManualresetEvent更改其状态。我个人喜欢任务链接是 - > https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx 通过Thread或Threadpool。 编辑:我今天在记事本上写了这个。如果它提供任何帮助。
Task t = Task.Run(() =>
{
//do the connection thing
Connection();
connectionDone.Set(); //Manualeventreset connectionDone = new ManualResetEvent(false);
});
try
{
t.Wait();
}
catch (AggregateException ae)
{
//write the exception somewhere
WriteLog("Exception in task: " + ae);
}
finally
{
connectionDone.Reset();
}