private void ExecuteWorkWithSystem(ManagedSystem system, Action <ManagedSystem> action, Action <ManagedSystem> onSuccess = null, Action <ManagedSystem> onFailure = null) { using var dbContext = DbContextFactory.CreateDbContext(); try { dbContext.Entry(system).Reload(); action(system); system.LastAccessed = DateTime.UtcNow; onSuccess?.Invoke(system); } catch (Exception e) { dbContext.Entry(system).Reload(); system.AddProblem($"{system.ProblemDescription}\n\n {DateTime.UtcNow}\n{e.Message}".Trim()); Logger.LogError(e, "While executing work with {system}: {exception}", system.Name, e.Message); onFailure?.Invoke(system); throw; } finally { dbContext.Update(system); dbContext.SaveChanges(); } }