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;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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();
        }