public Task Connect(EndPoint endPoint)
        {
            var tcs = new TaskCompletionSource <bool>();

            _pipeline.OpenConnection(endPoint,
                                     ex =>
            {
                _state = ClientState.Connect;
                if (ex != null)
                {
                    tcs.SetException(ProcessException(ex));
                }
                else
                {
                    tcs.SetResult(true);
                }
            });
            return(tcs.Task);
        }