Esempio n. 1
0
        private static IteratorContext ExecuteTaskHelper(ITask currentTask)
        {
            if (currentTask.LinkedIterator != null)
            {
                IteratorContext iteratorContext = (IteratorContext)currentTask.LinkedIterator;
                if (CausalityThreadContext.IsEmpty(iteratorContext._causalities))
                {
                    Dispatcher.ClearCausalities();
                }
                else
                {
                    Dispatcher.SetCurrentThreadCausalities(iteratorContext._causalities.Clone());
                }
            }
            else
            {
                Dispatcher.TransferCausalitiesFromTaskToCurrentThread(currentTask);
            }
            if (Debugger.IsAttached)
            {
                CausalityThreadContext currentThreadCausalities = Dispatcher.GetCurrentThreadCausalities();
                if (!CausalityThreadContext.IsEmpty(currentThreadCausalities) && CausalityThreadContext.RequiresDebugBreak(currentThreadCausalities))
                {
                    Debugger.Break();
                }
            }
            IEnumerator <ITask> enumerator = currentTask.Execute();

            if (enumerator != null)
            {
                return(new IteratorContext(enumerator, Dispatcher.GetCurrentThreadCausalities()));
            }
            return(null);
        }