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); }
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); }