예제 #1
0
        protected override void RunWriter(
            IEnumerable <ProcessorWorker> processorWorkers,
            IWriter writer,
            UserTask writerTask,
            string outputFilePath,
            OutputQueue outputQueue,
            Action <TaskStatus> callback)
        {
            UserTask newWriterTask = writerTask;

            if (_settings.CreateMultiStream && outputQueue.Capacity > 1)
            {
                newWriterTask =
                    (parameter) =>
                {
                    List <EventWaitHandle> waitHandles = new List <EventWaitHandle>();

                    foreach (ProcessorWorker processorWorker in processorWorkers)
                    {
                        waitHandles.Add(processorWorker.Event);
                    }

                    EventWaitHandle.WaitAll(waitHandles.ToArray());

                    writerTask.Invoke(parameter);
                };
            }

            base.RunWriter(processorWorkers, writer, newWriterTask, outputFilePath, outputQueue, callback);
        }
예제 #2
0
        private int Execute01(UserTask task)
        {
            int ret = -1;

            if (EnableAsync)
            {
                SingleThread.Execute(task, null, (taskStatus) => {
                    ret = (int)taskStatus.ReturnData;
                });
            }
            else
            {
                ret = (int)task.Invoke(null);
            }

            return(ret);
        }