示例#1
0
        public void Append(Type taskType, string description, object state)
        {
            var task = new TaskEntry(QueueName, taskType, description, state);

            task.Id = IdAllocator.Next();
            task.Status = TaskStatus.Pending;

            _tasksByStatus[task.Status].Add(task);
            _tasksById.Add(task.Id, task);
        }
示例#2
0
        public void Run(TaskEntry taskEntry)
        {
            var taskType = Type.GetType(taskEntry.TaskType, true);
            var task = Activator.CreateInstance(taskType) as ITask;
            var context = new TaskContext
            {
                State = taskEntry.LoadState()
            };

            task.Execute(context);
        }
示例#3
0
        public void Append(Type taskType, string description, object state)
        {
            Require.NotNull(taskType, "taskType");

            var task = new TaskEntry(QueueName, taskType, description, state);

            using (var session = OpenSession())
            using (var tx = session.BeginTransaction())
            {
                session.Save(task);
                tx.Commit();
            }
        }
示例#4
0
 private void RemoveTask(TaskEntry entry)
 {
     _tasksByStatus[entry.Status].Remove(entry);
     _tasksById.Remove(entry.Id);
 }
示例#5
0
        private void ChangeTaskStatus(TaskEntry task, TaskStatus newStatus)
        {
            _tasksByStatus[task.Status].Remove(task);

            task.Status = newStatus;
            if (newStatus == TaskStatus.Completed || newStatus == TaskStatus.Failed || newStatus == TaskStatus.Aborted)
            {
                task.LastStoppedAtUtc = DateTime.UtcNow;
            }

            _tasksByStatus[newStatus].Add(task);
        }