public async Task TearDown()
        {
            _cts.Dispose();
            using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)))
            {
                await Task.WhenAll(
                    _serverTransport.CloseAsync(cts.Token),
                    _clientTransport.CloseAsync(cts.Token));

                await _transportListener.StopAsync(cts.Token);
            }

            _clientTransport.DisposeIfDisposable();
            _serverTransport.DisposeIfDisposable();
            _transportListener.DisposeIfDisposable();

            // Set null to avoid issues with NUnit reusing the test class instance
            _clientTransport   = null;
            _serverTransport   = null;
            _transportListener = null;
        }