public Task StartAsync(CancellationToken cancellationToken) { _logger.LogInformation($"WhisperHostedService<{nameof(TPackage)}, {nameof(TPackageFilter)}> started"); var serverOptions = _serverOptions; if (serverOptions.Listeners?.Any() == true) { foreach (var listenerOption in serverOptions.Listeners) { if (cancellationToken.IsCancellationRequested) { return(Task.CompletedTask); } var listener = _channelListenerFactory.Create(listenerOption, serverOptions); listener.OnNewChannelAccepted += this.OnNewChannelAccepted; _channelListeners.Add(listener); _logger.LogInformation($"Listener {listenerOption.IP}:{listenerOption.Port} Added"); } } // Use ToList to ensure all listener is ready on ports var tasks = _channelListeners.Select(x => x.StartAsync()).ToList(); _serverOptions.TriggerServerReady(); return(Task.WhenAll(tasks)); }