コード例 #1
0
        protected override async Task <JobResult> RunInternalAsync(JobContext context)
        {
            const int LIMIT = 100;

            _lastRun = SystemClock.UtcNow;
            _logger.LogTrace("Start save stack event counts.");

            // Get list of stacks where snooze has expired
            var results = await _stackRepository.GetExpiredSnoozedStatuses(SystemClock.UtcNow, o => o.PageLimit(LIMIT)).AnyContext();

            while (results.Documents.Count > 0 && !context.CancellationToken.IsCancellationRequested)
            {
                foreach (var stack in results.Documents)
                {
                    stack.MarkOpen();
                }

                await _stackRepository.SaveAsync(results.Documents).AnyContext();

                // Sleep so we are not hammering the backend.
                await SystemClock.SleepAsync(TimeSpan.FromSeconds(2.5)).AnyContext();

                if (context.CancellationToken.IsCancellationRequested || !await results.NextPageAsync().AnyContext())
                {
                    break;
                }

                if (results.Documents.Count > 0)
                {
                    await context.RenewLockAsync().AnyContext();
                }
            }

            _logger.LogTrace("Finished save stack event counts.");
            return(JobResult.Success);
        }