private async Task StartListening(CancellationToken cancellationToken) { ServerTransport.Listen(); Logger.LogTrace("Started listening at server"); if (ServerEventHandler != null) { await ServerEventHandler.PreServeAsync(cancellationToken); } while (!cancellationToken.IsCancellationRequested) { if (ServerTransport.IsClientPending()) { Logger.LogTrace("Waiting for client connection"); try { var client = await ServerTransport.AcceptAsync(cancellationToken); await Task.Factory.StartNew(() => Execute(client, cancellationToken), cancellationToken); } catch (TTransportException ttx) { Logger.LogTrace($"Transport exception: {ttx}"); if (ttx.Type != TTransportException.ExceptionType.Interrupted) { Logger.LogError(ttx.ToString()); } } } else { try { await Task.Delay(TimeSpan.FromMilliseconds(_clientWaitingDelay), cancellationToken); } catch (TaskCanceledException) { } } } ServerTransport.Close(); Logger.LogTrace("Completed listening at server"); }