のえら

技術備忘とかメモとか.間違いはつっこんでいただきたい所存.

C#でタイムアウト処理 そのに

前回のやり方だと、インスタンスを生成する際に引数に値を渡してしまっているので、
初めの接続で応答待ちが発生してしまう、と。

で、TCPClientのインスタンスを生成してからタイムアウト時間を設定して、
それから接続。という方法でやってみたのですが、それもうまくいかず…。
タイムアウトがうまく働かないと嘆いていたら代用のコードの書き方を教えていただきました。

private ManualResetEvent _connect = new ManualResetEvent(false);

/// <summary>
/// コネクションを開く
/// </summary>
public void ConnectOpen()
{
 ConnectingHostName = ServerHost;

 _connect.Reset();

 _tcpClient = new TcpClient();
 _tcpClient.BeginConnect(ServerHost, UserPort, new AsyncCallback(ConnectCallback), _tcpClient);

 if (!_connect.WaitOne(5000))
 {
  _tcpClient.Close();
  throw new SocketException();
 }

 _networkStream = _tcpClient.GetStream();
}

private void ConnectCallback(IAsyncResult result)
{
 _connect.Set();
}

接続してから、WaitOneで設定したミリ秒が経過すると、
通信エラーを返すので、それをキャッチして処理する。


でも結局ソケットを使うことになったらしいので、TCPClient使わないんですよねって話←
それにしても…、ホントにいろいろな書き方があるんですね、すごいなぁ。