private async Task KeepAliveAsync(TimerAwaitable timer) { using (timer) { timer.Start(); while (await timer) { if (Stopwatch.GetTimestamp() - Interlocked.Read(ref _lastReceiveTimestamp) > DefaultServiceTimeoutTicks) { AbortConnection(); // We shouldn't get here twice. continue; } } } }
public async Task StartAsync(CancellationToken cancellationToken = default) { try { foreach (var binding in _builder.Bindings) { await foreach (var listener in binding.BindAsync(cancellationToken)) { var runningListener = new RunningListener(this, binding, listener); _listeners.Add(runningListener); runningListener.Start(); } } } catch { await StopAsync(); throw; } _timerAwaitable.Start(); _timerTask = StartTimerAsync(); }