【问题标题】:C# Tcp Connection async/await [closed]C# Tcp 连接异步/等待 [关闭]
【发布时间】:2017-04-20 12:21:56
【问题描述】:

我有一个关于我正在编写的 TCP 连接类的问题。

我已经编写的连接类可以通过 TCP 建立连接。它从两个不同的线程监听并写入该连接。现在我想改进那门课。

我想建立这个完全异步的连接,以便在我的应用程序中的其他东西准备好的同时建立连接。 但是我还有其他一些需要建立连接才能正常工作的类。所以,我的问题是,有人可以用一个小例子来解释我如何建立异步连接,而其他类在建立连接后开始工作的可能性?

我的第一个想法是在 TCP 客户端连接后触发一个事件,但后来我遇到了这样一个事实,即只有在远程服务器发回消息时才完全建立连接。 在那之后,我有了一个创建连接状态的想法。但现在我不知道如何进一步。

如果不是使用 await 和 async 的方式,请告诉我。

提前致谢, 帕特里克

编辑:

感谢您的回答。为了澄清一些事情,我想更新我的帖子。

由于有人要求我到目前为止所拥有的,我将我的源代码发布在GitHub。在Line 46 中,我将连接状态设置为正在连接。建立 TCP 连接后,我将状态更改为 Fetching (L155)。现在我必须等待表明连接已完全就绪的消息。消息发出后,我希望我将状态设置为打开 (L315) 并触发 ConnectionEstablished 事件。

请原谅,但我不能发布超过 2 个链接。

【问题讨论】:

  • 您需要在线程中添加一个块,在建立连接之前不允许发送消息。请参阅 msdn:msdn.microsoft.com/en-us/library/…。另请参阅 WaitOne:msdn.microsoft.com/en-us/library/kzy257t0(v=vs.110).aspx
  • 到目前为止你尝试过什么?这不是免费代码结构,请展示您的努力,您的代码等。
  • 我看到您使用的是BeginConnect,这是一个比ConnectAsync 更旧的API,所以我的第一个建议是转用它。请参阅 here 关于 BeginConnect 与 ConnectAsync 的讨论以及 Stephen Clearys blog 以了解 async await 的介绍
  • @SUNflOw1991 你到底想完成什么?正如@Default 所指出的,TcpClient 已经有一个异步 api。您需要将问题缩小或以其他方式澄清到一个目标和一个可重现的问题。

标签: c# tcp async-await


【解决方案1】:

我的一点是:而不是使用线程块;使用 ManualresetEvent 为 TCP 连接编写一个任务。使线程的另一部分根据 ManualresetEvent 更改其状态。我个人喜欢任务链接是-> https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx 通过线程或线程池。 编辑:我今天在记事本上写了这个。如果它有任何帮助。

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();
        }

【讨论】:

  • 非常感谢您的回答。我在我的问题中添加了一些包含源代码的更多信息。
  • 谢谢,这对我有帮助。我会接受的。
  • 很高兴听到@SUNflOw1991。如果我的一点点有用,请给一个分数。干杯
猜你喜欢
  • 2021-12-20
  • 2020-01-03
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 2012-12-15
  • 1970-01-01
相关资源
最近更新 更多