这是误用异步方法吗?

时间:2017-06-07 10:59:15

标签: c# asynchronous tcpclient

我第一次面对异步方法,我无法理解以下代码在同步版本上的优势:

    private void SendCallback(IAsyncResult ar)
    {
        // Retrieve the socket from the state object.
        Socket client = (Socket)ar.AsyncState;

        // Complete sending the data to the remote device.
        int bytesSent = client.EndSend(ar);

        // Signal that all bytes have been sent.
        SendCompleted.Set();
    }

    private AutoResetEvent SendCompleted = new AutoResetEvent(false);

    public bool Send(byte[] byteData)
    {
        try
        {
            RfTcpClient.Client.BeginSend(byteData, 0, byteData.Length, 0,
                   new AsyncCallback(this.SendCallback), RfTcpClient.Client);
        }
        catch (Exception)
        {
            return false;
        }

        return SendCompleted.WaitOne(1000, true);
    }

我简化了一点,所以不要在乎小错误!

发送方法开始发送消息,然后等待操作完成而不浪费cpu时间。新线程执行 SendCallback ,在通信通道上写入,主动等待操作完成,然后发出发送方法的线程信号。

我看不出同步方法的任何优点。 我的假设是 client.EndSend 会花费cpu时间直到它完成,因此同步方法只会移动到另一个线程。我错过了什么吗?

0 个答案:

没有答案