Ejemplo n.º 1
0
        private async Task RunCronJob <T>() where T : ICronJob
        {
            using (var serviceScope = _serviceScopeFactory.CreateScope())
            {
                _cronJob = serviceScope.ServiceProvider.GetService <T>();

                while (!_cancellationTokenSource.Token.IsCancellationRequested)
                {
                    var timeToNext = _cronExpression.GetTimeToNext();

                    if (!timeToNext.HasValue)
                    {
                        return;
                    }

                    await Task.Delay((int)timeToNext.Value.TotalMilliseconds, _cancellationTokenSource.Token);

                    await _cronJob.RunJob(_cancellationTokenSource.Token);
                }
            }
        }