async Task PollerAsync()

in src/Microsoft.Azure.WebJobs.Logging/Internal/ContainerActiveLogger.cs [78:131]


        async Task PollerAsync()
        {
            do
            {
                try
                {
                    await Task.Delay(_interval, _cancel.Token);
                }
                catch (OperationCanceledException)
                {
                    // Don't return yet. One last chance to flush 
                }

                bool hasOutstanding;
                lock (_lock)
                {
                    hasOutstanding = _outstandingCount.Count > 0;
                }

                bool active = _recent || hasOutstanding;
                _recent = false;

                if (active)
                {
                    var now = DateTime.UtcNow;

                    // If previous exists, update it
                    var currentBucket = TimeBucket.ConvertToBucket(now);
                    var prevBucket = currentBucket - 1;

                    ContainerActiveEntity prevEntry = await TryGetAsync(prevBucket);
                    if (prevEntry == null)
                    {
                        prevEntry = await TryGetAsync(currentBucket);
                    }
                    if (prevEntry != null)
                    {
                        if (prevEntry.GetLength() > LengthThreshold)
                        {
                            prevEntry = null;
                        }
                    }

                    if (prevEntry == null)
                    {
                        prevEntry = ContainerActiveEntity.New(now, _containerName);
                    }

                    // Update the length on the previous entry
                    prevEntry.EndTime = now;
                    await SaveAsync(prevEntry);
                }
            } while (!_cancel.IsCancellationRequested);
        }