/// <summary> /// Try execute task. /// </summary> internal void TryStartTask() { var isCan = IsCanExecuteTask( ); if (!isCan) { SetStatusFree(); } else { this.SetStatusBusy(); UpExecutionAttempt(currentTask); WorkerTaskStore.SetProccesStatus(currentTask); var executeThTask = new TaskFactory().StartNew(() => { try { _execution.Execute(currentTask); WorkerTaskStore.SetSuccessStatus(currentTask); } catch { WorkerTaskStore.SetFailedStatus(currentTask); } }); executeThTask.Wait(); } }
/// <summary> /// Iterate the execution task attempt. /// </summary> /// <param name="task"></param> private void UpExecutionAttempt(QueueTask task) { if (task == null) { throw new ArgumentNullException(nameof(task)); } task.Attempt++; WorkerTaskStore.Update(task); }
/// <summary> /// Try execute task. /// </summary> private void TryStartNextTask() { if (!IsCanExecuteTask()) { SetStatusFree(); } else { SetStatusBusy(); UpExecutionAttempt(currentTask); WorkerTaskStore.SetProccesStatus(currentTask); try { _execution.Execute(currentTask); WorkerTaskStore.SetSuccessStatus(currentTask); } catch { WorkerTaskStore.SetFailedStatus(currentTask); } } }
/// <summary> /// Check executeble queueTask and return boolean value and queueTask workerId. /// </summary> /// <param name="isCan"></param> /// <param name="index"></param> private bool IsCanExecuteTask() { var tasks = WorkerTaskStore.Where(each => each.QueueName == queueName && each.QueueTaskStatus == QueueTaskStatus.Created || each.QueueTaskStatus == QueueTaskStatus.Failed); var task = tasks.ToList().FirstOrDefault(each => CheckStatus(each) && each.QueueName == queueName); Func <bool> freeTask = delegate { currentTask = null; SetStatusFree(); return(false); }; if (task == null) { return(freeTask()); } if (!CheckStatus(task) || !CheckOnAttemptLimit(task)) { return(freeTask()); } currentTask = task; currentTask.TaskIndexInQueue = this.Id; WorkerTaskStore.Update(currentTask); return(true); }