public async Task StartupServer(IPAddress address, ushort port)
        {
            using (var sync = await webServerLock.LockAsync(shutdownCancellationToken).ConfigureAwait(false))
            {
                StopOldServer();

                combinedWebServerTokenSource =
                    CancellationTokenSource.CreateLinkedTokenSource(shutdownCancellationToken);

                webServer = new MediaWebServer(address, port);
                Trace.TraceInformation(Invariant($"Starting Web Server on {address}:{port}"));

                webServerTask = webServer.StartListening(combinedWebServerTokenSource.Token)
                                .ContinueWith((x) => WebServerFinished(x), combinedWebServerTokenSource.Token);
            }
        }
        public async Task StartupServer(IPAddress address, ushort port)
        {
            await webServerLock.WaitAsync(shutdownCancellationToken).ConfigureAwait(false);

            try
            {
                await StopOldServer().ConfigureAwait(false);

                webServerTokenSource         = new CancellationTokenSource();
                combinedWebServerTokenSource =
                    CancellationTokenSource.CreateLinkedTokenSource(webServerTokenSource.Token, shutdownCancellationToken);

                webServer = new MediaWebServer(address, port);
                logger.LogInfo(Invariant($"Starting Web Server on {address}:{port}"));

                webServerTask = webServer.StartListening(combinedWebServerTokenSource.Token)
                                .ContinueWith((x) => WebServerFinished(x), combinedWebServerTokenSource.Token);
            }
            finally
            {
                webServerLock.Release();
            }
        }