public void PushInTaskOutput(string taskId, TaskOutput output)
 {
     lock (objectMutex)
     {
         if (!taskOutput.ContainsKey(taskId))
         {
             taskOutput.Add(output.TaskId, output);
         }
     }
 }
        public void RemoveDeadClientsIterators(ArrayList clients)
        {
            ICollection outputKeyList = taskOutput.Keys;

            foreach (String key in outputKeyList)
            {
                TaskOutput taskout = (TaskOutput)taskOutput[key];
                taskout.RemoveDeadClients(clients);
                if (taskout.OutputDisposed)
                {
                    taskOutput.Remove(key);
                }
            }
        }
        public TaskEnumeratorResult NextRecord(TaskEnumeratorPointer pointer)
        {
            lock (objectMutex) {
                if (TaskOutputExists(pointer.TaskId))
                {
                    TaskOutput           output = (TaskOutput)taskOutput[pointer.TaskId];
                    TaskEnumeratorResult result = output.NextRecord(pointer);

                    if (output.OutputDisposed)
                    {
                        taskOutput.Remove(pointer.TaskId);
                    }

                    return(result);
                }
                else
                {
                    throw new InvalidTaskEnumeratorException("Output with task id : " + pointer.TaskId + " got corrupted.");
                }
            }
        }
        public TaskEnumeratorResult GetTaskEnumerator(TaskEnumeratorPointer pointer)
        {
            lock (objectMutex)
            {
                if (TaskOutputExists(pointer.TaskId))
                {
                    TaskOutput           output = (TaskOutput)taskOutput[pointer.TaskId];
                    TaskEnumeratorResult result = output.GetEnumerator(pointer);

                    if (output.OutputDisposed)
                    {
                        taskOutput.Remove(pointer.TaskId);
                    }

                    return(result);
                }
                else
                {
                    throw new InvalidTaskEnumeratorException("Output with taskId '" + pointer.TaskId + "' does not exist. Task might be cancelled or failed.");
                }
            }
        }