public async Task Destroy()
        {
            m_Acceptor.Dispose();

            const int maxRetryCount = 5;

            for (int i = 0; i < maxRetryCount; i++)
            {
                if (m_Connections.IsEmpty)
                {
                    break;
                }

                foreach (var(id, connection) in m_Connections)
                {
                    connection.Dispose();
                    m_Connections.TryRemove(id, out var temp);
                }

                const int delayTime = 30;
                await Task.Delay(TimeSpan.FromMilliseconds(delayTime));
            }

            Dispose();
        }
        public void Dispose()
        {
            if (m_IsDisposed)
            {
                return;
            }
            m_IsDisposed = true;

            m_Acceptor?.Dispose();
        }