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); } }
public TestController(WorkerServiceDbContext dbContext) { _dbContext = dbContext; }