示例#1
0
        /// <summary>Processes source files in parallel using .NET Tasks. The method returns immediately.</summary>
        public Task <RVList <LNode> >[] ProcessAsync(IReadOnlyList <InputOutput> sourceFiles, Action <InputOutput> onProcessed = null)
        {
            int parentThreadId = Thread.CurrentThread.ManagedThreadId;

            Task <RVList <LNode> >[] tasks = new Task <RVList <LNode> > [sourceFiles.Count];
            for (int i = 0; i < tasks.Length; i++)
            {
                var io = sourceFiles[i];
                tasks[i] = System.Threading.Tasks.Task.Factory.StartNew <RVList <LNode> >(() => {
                    using (ThreadEx.PropagateVariables(parentThreadId))
                        return(new MacroProcessorTask(this).ProcessFileWithThreadAbort(io, onProcessed, AbortTimeout));
                });
            }
            return(tasks);
        }