コード例 #1
0
        public TaskData GetTaskData()
        {
            if (taskDataInvalid)
            {
                return(null);
            }

            if (task != null && task.ExecutionState == ExecutionState.Started)
            {
                throw new InvalidStateException("Task is still running");
            }

            TaskData taskData = null;

            if (task == null)
            {
                if (CurrentException == null)
                {
                    CurrentException = new Exception("Task with id " + this.TaskId + " is null, sending empty task");
                }
            }
            else
            {
                taskData        = new TaskData();
                taskData.Data   = PersistenceUtil.Serialize(task);
                taskData.TaskId = TaskId;
            }
            return(taskData);
        }
コード例 #2
0
        public Tuple <TaskData, DateTime> GetTaskDataSnapshot()
        {
            if (taskDataInvalid)
            {
                return(null);
            }

            Tuple <TaskData, DateTime> snapshot = null;

            if (task == null)
            {
                if (CurrentException == null)
                {
                    CurrentException = new Exception("Task with id " + this.TaskId + " is null, sending empty task");
                }
            }
            else
            {
                var taskData = new TaskData();

                var          pausedTrigger = new EventWaitHandle(false, EventResetMode.ManualReset);
                EventHandler pausedHandler = null;
                pausedHandler = (s, e) => {
                    task.TaskPaused -= pausedHandler;
                    task.TaskPaused += Task_TaskPaused;
                    pausedTrigger.Set();
                };

                task.TaskPaused -= Task_TaskPaused;
                task.TaskPaused += pausedHandler;
                task.Pause();
                pausedTrigger.WaitOne();

                taskData.Data = PersistenceUtil.Serialize(task);
                var timestamp = DateTime.Now;

                EventHandler startedHandler = null;
                startedHandler = (s, e) => {
                    task.TaskStarted -= startedHandler;
                    task.TaskStarted += Task_TaskStarted;
                };

                task.TaskStarted -= Task_TaskStarted;
                task.TaskStarted += startedHandler;
                task.Start();

                taskData.TaskId = TaskId;
                snapshot        = Tuple.Create(taskData, timestamp);
            }

            return(snapshot);
        }