Exemplo n.º 1
0
        /// <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();
            }
        }
Exemplo n.º 2
0
 /// <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);
 }
Exemplo n.º 3
0
 /// <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);
         }
     }
 }
Exemplo n.º 4
0
        /// <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);
        }