public override async System.Threading.Tasks.Task <bool> Connect(string strHostIp, UInt16 nPort, int timeOutMillisecond = 3000) { await Thread.AsyncDummyClass.DummyFunc(); Profiler.Log.WriteLine(Profiler.ELogTag.Info, "RPC", $"TcpClient.Connect:{strHostIp},{nPort}"); Close(); hostIp = strHostIp; port = nPort; IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(hostIp), port); try { mSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); //if (!SocketOption.SupportSocketIOControl) // mSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, keepAliveOptionValues); //else // mSocket.IOControl(IOControlCode.KeepAliveValues, keepAliveOptionValues, null); //mSocket.NoDelay = true; //mSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true); //if (false) //{ // mSocket.Connect(ipe); //} //else { TimeoutObject.Reset(); mSocket.BeginConnect(ipe, CallBackMethod, mSocket); //阻塞当前线程 TimeoutObject.WaitOne(timeOutMillisecond, false); if (mSocket.Connected == false) { mSocket.Close(); Profiler.Log.WriteLine(Profiler.ELogTag.Info, "RPC", $"TcpClient Connect {ipe} Timeout({timeOutMillisecond})"); } } } catch (Exception e) { Profiler.Log.WriteException(e); } if (mSocket.Connected == false) { return(false); } else { mRun = true; //mRecvThread = new System.Threading.Thread(this.RecvPackageProc); //mRecvThread.Name = "TcpClient"; //mRecvThread.Start(); try { //ReceiveBuffer buffer = new ReceiveBuffer(); //mSocket.BeginReceive(buffer.buffer, buffer.count, buffer.buffer.Length - buffer.count, SocketFlags.None, EndReceive, buffer); mRcvBuffer.Reset(); mSocket.BeginReceive(mRcvBuffer.buffer, mRcvBuffer.count, mRcvBuffer.buffer.Length - mRcvBuffer.count, SocketFlags.None, EndReceive, mRcvBuffer); } catch (System.Exception ex) { Profiler.Log.WriteException(ex); } return(true); } }