private void DispatchRequest( Request request, Action<Response, object> completed, Action<ErrorCode, object> error, object context) { try { if (ConnectionState != ConnectionState.Connected) { Log("Can't send request (not connected)"); throw new Exception("Not connected"); } //if (IsBusy) //{ // Log("Connection is busy (still waiting for response to last request"); // throw new Exception("Connection is busy (still waiting for reponse to last request"); //} //IsBusy = true; var socketAsyncEventArgs = new SocketAsyncEventArgs { UserToken = new CallContext { CompletedAction = completed, ErrorAction = error, Request = request, UserContext = context, Operation = SocketAsyncOperation.Send, } }; socketAsyncEventArgs.Completed += OnSocketAsyncCompleted; byte[] buffer = request.ToEncodedBytes(); socketAsyncEventArgs.SetBuffer(buffer, 0, buffer.Length); if (!_socket.SendAsync(socketAsyncEventArgs)) { OnSocketAsyncCompleted(_socket, socketAsyncEventArgs); } } catch (Exception e) { Console.WriteLine(e); } }