示例#1
0
        /// <summary>
        /// Производит предварительное подключение к серверу. Может использоваться для повторного переподключения.
        /// </summary>
        /// <remarks>Потокобезопасно.</remarks>
        /// <exception cref="VRpcConnectException"/>
        /// <exception cref="VRpcWasShutdownException"/>
        /// <exception cref="ObjectDisposedException"/>
        public async Task ConnectAsync()
        {
            ConnectResult connectResult = await ConnectExAsync().ConfigureAwait(false);

            switch (connectResult.State)
            {
            case ConnectionState.Connected:
                return;

            case ConnectionState.SocketError:
            {
                Debug.Assert(connectResult.SocketError != null);

                ThrowHelper.ThrowConnectException(
                    message: $"Unable to connect to the remote server. Error: {(int)connectResult.SocketError}",
                    innerException: connectResult.SocketError.Value.ToException());

                break;
            }

            case ConnectionState.ShutdownRequest:
            {
                Debug.Assert(connectResult.ShutdownRequest != null);
                ThrowHelper.ThrowException(connectResult.ShutdownRequest.ToException());
                break;
            }
            }
        }