コード例 #1
0
        public async Task CloseAsync(Exception e, bool awaitAll)
        {
            if (!IsSynced && !Client.Connected)
            {
                return;
            }
            IsSynced = false;

            if (e == null)
            {
                await SendCommand(OwnTcpCommunicator.CloseCmd, true).ConfigureAwait(false);
            }

            PingSem.Release();
            SendQueue.End();

            await ProcessQueue.End().ConfigureAwait(false);

            Client.Dispose();

            foreach (OwnTcpSendMessage message in Waits.Values)
            {
                message.SetResult(false);
            }

            Task raiseTask = RaiseDisconnected();

            if (awaitAll)
            {
                await raiseTask.ConfigureAwait(false);
            }

            async Task RaiseDisconnected()
            {
                if (Task != null)
                {
                    await Task.ConfigureAwait(false);
                }

                Disconnected?.Invoke(this, new DisconnectedEventArgs(e == null, e));
            }
        }