我第一次面对异步方法,我无法理解以下代码在同步版本上的优势:
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时间直到它完成,因此同步方法只会移动到另一个线程。我错过了什么吗?