public MockedFailedScheduledTaskEngine(ScheduledTaskMonitorContext context, ScheduledTaskExecutionInfo fakeItemForGetScheduledTasksToRun = null) : base(context) { ExitStrategy.Quitting = false; // <<==== IMPORTANT! Otherwise the engine "loop" will just quit before it has even started _getReturnItem = fakeItemForGetScheduledTasksToRun; FinalStatusOutcomeDeterminedHandler += outcomeStatusId => { StatusResult = outcomeStatusId; ExitStrategy.Quitting = true; }; }
protected List<ScheduledTaskExecutionInfo> GetScheduledTasksToRun(ScheduledTaskStatusId scheduledTaskStatusId) { var scheduledTasksToRun = new List<ScheduledTaskExecutionInfo>(); OperationContext.ThreadSafeDataAccess.DataAccessOperation(() => { using (var database = new CloudCoreDB()) { scheduledTasksToRun = (from t in database.Cloudcore_ScheduledTasksToRun((int)scheduledTaskStatusId, KeepAliveSettings.Instance.TimeOutInSeconds) let scheduledTaskId = t.ScheduledTaskId where scheduledTaskId.HasValue let scheduledTaskGuid = t.ScheduledTaskGuid where scheduledTaskGuid.HasValue let retries = t.Retries where retries.HasValue let maxRetries = t.MaxRetries where maxRetries.HasValue let scheduledTaskTypeId = t.ScheduledTaskTypeId where scheduledTaskTypeId != null select new ScheduledTaskExecutionInfo { ScheduledTaskId = scheduledTaskId.Value, ScheduledTaskGuid = scheduledTaskGuid.Value, ScheduledTaskName = t.ScheduledTaskName, ScheduledTaskType = (ExecutionType)scheduledTaskTypeId.Value, CurrentRetries = retries.Value, MaximumRetries = maxRetries.Value }).ToList(); } }); return scheduledTasksToRun; }
protected virtual void UpdateFailureOutcome(int scheduledTaskId, string message, ScheduledTaskStatusId outcomeStatus) { try { OperationContext.ThreadSafeDataAccess.DataAccessOperation(() => { using (var database = new CloudCoreDB()) { database.Cloudcore_ScheduledTaskUpdateOutcome(scheduledTaskId, (byte)outcomeStatus, message); } }); } catch (DataThreadDeadlockException ex) { Logger.Fatal(string.Format("Unable to update scheduled task final failure outcome after execution (ID {0}). Exiting...", scheduledTaskId), ex, OperationContext.LoggingCategory); ExitStrategy.Quitting = true; throw; } }
private void OnFailureStatusOutcomeDetermined(ScheduledTaskStatusId outcomeStatusId) { if (FinalStatusOutcomeDeterminedHandler != null) FinalStatusOutcomeDeterminedHandler.Invoke(outcomeStatusId); }
protected override void UpdateFailureOutcome(int scheduledTaskId, string message, ScheduledTaskStatusId outcome) { }