protected override async Task ExecuteAsync(CancellationToken cancellationToken) { _logger.LogInformation("Timed Background Service is starting."); var options = new DbContextOptionsBuilder <ApplicationDbContext>() .UseSqlServer(new SqlConnection(_configuration.GetConnectionString("DocumentManagementConnection"))) .Options; var _context = new ApplicationDbContext(options, _configuration); //var _context = _scope.ServiceProvider.GetService<ApplicationDbContext>(); //_timer = new Timer(DoWork, _context, TimeSpan.Zero,TimeSpan.FromSeconds(15)); _wfservice = new WorkflowService(new DefaultWorkflowKernel(_context, _configuration)); while (!cancellationToken.IsCancellationRequested) { _logger.LogInformation("Vuelta!!"); var caja = await _context.CajasValoradas.OrderBy(d => d.CodigoSeguimiento).AsNoTracking().FirstOrDefaultAsync(d => d.MarcaAvance == "READYTOPROCESS-NOT-YET"); if (caja != null) { caja.MarcaAvance = "INPROCCES"; _context.CajasValoradas.Update(caja); await _context.SaveChangesAsync(); _logger.LogInformation("Agarramos la caja: " + caja.CodigoSeguimiento); var transa = _context.Database.BeginTransaction(IsolationLevel.ReadCommitted); try { List <ExpedienteCredito> expedientesModificados = new List <ExpedienteCredito>(); List <string> ticketsAvanzar = new List <string>(); var folios = _context.PasosValijasValoradas.Where(c => c.CodigoCajaValorada == caja.CodigoSeguimiento).GroupBy(d => d.FolioCredito).Select(d => d.Key).ToList(); foreach (var item in folios) { var elExpediente = _context.ExpedientesCreditos.Include(d => d.Credito).SingleOrDefault(x => x.Credito.FolioCredito == item); elExpediente.CajaValorada = caja; expedientesModificados.Add(elExpediente); ticketsAvanzar.Add(elExpediente.Credito.NumeroTicket); } _context.ExpedientesCreditos.UpdateRange(expedientesModificados); await _context.SaveChangesAsync(); await _wfservice.AvanzarRango(ProcesoDocumentos.NOMBRE_PROCESO, ProcesoDocumentos.ETAPA_DESPACHO_A_CUSTODIA, ticketsAvanzar, caja.Usuario); /*Delete entries form box*/ _context.PasosValijasValoradas.RemoveRange(_context.PasosValijasValoradas.Where(c => c.CodigoCajaValorada == caja.CodigoSeguimiento && c.Usuario == caja.Usuario)); caja.MarcaAvance = "DESPACUST"; _context.CajasValoradas.Update(caja); await _context.SaveChangesAsync(); var usr = _context.Users.FirstOrDefault(du => du.Identificador == caja.Usuario); await _notificion.Clients.User(usr.Id).SendAsync("NotificarCajaCerrada", caja.CodigoSeguimiento); transa.Commit(); } catch (Exception ex) { _logger.LogInformation("Transa lanzo error. " + ex.Message); transa.Rollback(); if (caja != null) { caja.MarcaAvance = "READYTOPROCESS-NOT-YET"; _context.CajasValoradas.Update(caja); _context.SaveChanges(); } } } await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken); } }