C#爲網絡任務(如TcpClient和WebClient)提供了幾個有用的類。兩者都有BeginX方法(分別爲BeginConnect和BeginGetResponse),根據MSDN,EndX應始終遵循這些方法。兩者都接受操作完成後調用的委託。我是否應該始終調用TcpClient.EndConnect(即使連接失敗?)
但是,假設我們未能建立連接,因此調用這些方法會引發異常。我仍然應該調用相應的EndX方法,還是應該先檢查連接是否已建立,然後才能調用它們?
另外,在下面的例子中,我應該使用OnSocketConnected1還是OnSocketConnected2?
static TcpClient m_client;
private static void OnSocketConnected1 (IAsyncResult asynchronousResult)
{
try
{
m_client.EndConnect(asynchronousResult);
}
catch { }
}
private static void OnSocketConnected2(IAsyncResult asynchronousResult)
{
if (m_client.Connected)
{
try
{
m_client.EndConnect(asynchronousResult);
}
catch { }
}
}
static void Main(string[] args)
{
m_client = new TcpClient();
m_client.BeginConnect("http://www.example.com", 555, OnSocketConnected, null);
Console.ReadLine();
}
感謝
也許這是不正確的。我在調用連接失敗的回調函數中的EndConnect()時引發了SocketException。它說(我從中文翻譯它,可能不準確):對無法連接的網絡執行套接字操作。 – guogangj 2016-01-28 08:22:26