public override async Task StartAsync(CancellationToken cancellationToken)
        {
            var scope = _scopeFactory.CreateScope();

            _dbContext = scope.ServiceProvider.GetRequiredService <WorkerServiceDbContext>();
            await base.StartAsync(cancellationToken);
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                if (_dbContext == null)
                {
                    var scope = _scopeFactory.CreateScope();
                    _dbContext = scope.ServiceProvider.GetRequiredService <WorkerServiceDbContext>();
                }

                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);

                var loggedOutUsers = await _dbContext.Users
                                     .Where(user => user.IsOnline &&
                                            user.EndLoginTime <= DateTime.Now).ToListAsync();

                foreach (var user in loggedOutUsers)
                {
                    user.IsOnline = false;
                    _logger.LogInformation("User {0} timed out", user.UserName);
                }

                if (_dbContext.ChangeTracker.HasChanges())
                {
                    await _dbContext.SaveChangesAsync();
                }

                await Task.Delay(1000, stoppingToken);
            }
        }
Exemplo n.º 3
0
 public TestController(WorkerServiceDbContext dbContext)
 {
     _dbContext = dbContext;
 }