Exemple #1
0
 internal static void FilterExceptionThroughCausalities(ITask task, Exception exception)
 {
     try
     {
         CausalityThreadContext currentThreadCausalities = Dispatcher.GetCurrentThreadCausalities();
         if (CausalityThreadContext.IsEmpty(currentThreadCausalities))
         {
             if (task != null)
             {
                 DispatcherQueue taskQueue = task.TaskQueue;
                 if (!taskQueue.RaiseUnhandledException(exception))
                 {
                     Dispatcher dispatcher = taskQueue.Dispatcher;
                     if (dispatcher != null)
                     {
                         dispatcher.RaiseUnhandledException(exception);
                     }
                 }
             }
         }
         else
         {
             currentThreadCausalities.PostException(exception);
         }
     }
     catch (Exception exception2)
     {
         Dispatcher.LogError(Resource1.ExceptionDuringCausalityHandling, exception2);
     }
 }
Exemple #2
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);
        }
Exemple #3
0
        public static void AddCausality(ICausality causality)
        {
            Dispatcher._causalitiesActive = true;
            CausalityThreadContext causalityThreadContext = Dispatcher.GetCurrentThreadCausalities();

            if (CausalityThreadContext.IsEmpty(causalityThreadContext))
            {
                causalityThreadContext = new CausalityThreadContext(causality, null);
                Dispatcher.SetCurrentThreadCausalities(causalityThreadContext);
                return;
            }
            causalityThreadContext.AddCausality(causality);
        }
Exemple #4
0
        internal static CausalityThreadContext CloneCausalitiesFromCurrentThread()
        {
            if (!Dispatcher._causalitiesActive)
            {
                return(null);
            }
            CausalityThreadContext currentThreadCausalities = Dispatcher.GetCurrentThreadCausalities();

            if (CausalityThreadContext.IsEmpty(currentThreadCausalities))
            {
                return(null);
            }
            return(currentThreadCausalities.Clone());
        }
Exemple #5
0
        internal void AddCausality(ICausality causality)
        {
            if (CausalityThreadContext.IsEmpty(this))
            {
                ActiveCausality = causality;
                return;
            }
            if (CausalityTable == null)
            {
                CausalityTable = new Dictionary <Guid, ICausality>();
            }
            if (ActiveCausality == null)
            {
                if (Stacks != null)
                {
                    if (CausalityTable.ContainsKey(causality.Guid))
                    {
                        return;
                    }
                    CausalityTable.Add(causality.Guid, causality);
                    foreach (CausalityStack current in Stacks)
                    {
                        current.Add(causality);
                    }
                }
                return;
            }
            if (causality.Guid == ActiveCausality.Guid)
            {
                return;
            }
            CausalityTable.Add(ActiveCausality.Guid, ActiveCausality);
            CausalityTable.Add(causality.Guid, causality);
            Stacks = new List <CausalityStack>();
            CausalityStack causalityStack = new CausalityStack();

            causalityStack.Add(ActiveCausality);
            causalityStack.Add(causality);
            ActiveCausality = null;
            Stacks.Add(causalityStack);
        }
Exemple #6
0
        private static bool RemoveCausality(string name, ICausality causality)
        {
            CausalityThreadContext currentThreadCausalities = Dispatcher.GetCurrentThreadCausalities();

            return(!CausalityThreadContext.IsEmpty(currentThreadCausalities) && currentThreadCausalities.RemoveCausality(name, causality));
        }