Пример #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);
     }
 }
Пример #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);
        }
Пример #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);
        }
Пример #4
0
        internal static CausalityThreadContext CloneCausalitiesFromCurrentThread()
        {
            if (!Dispatcher._causalitiesActive)
            {
                return(null);
            }
            CausalityThreadContext currentThreadCausalities = Dispatcher.GetCurrentThreadCausalities();

            if (CausalityThreadContext.IsEmpty(currentThreadCausalities))
            {
                return(null);
            }
            return(currentThreadCausalities.Clone());
        }
Пример #5
0
 private static void MoveIterator(ref ITask currentTask, IteratorContext iteratorContext, ref Handler finalizer)
 {
     lock (iteratorContext)
     {
         bool flag2 = false;
         try
         {
             flag2 = !iteratorContext._iterator.MoveNext();
             if (!flag2)
             {
                 iteratorContext._causalities = Dispatcher.GetCurrentThreadCausalities();
                 currentTask = iteratorContext._iterator.Current;
                 currentTask.ArbiterCleanupHandler = finalizer;
                 finalizer = null;
             }
             else
             {
                 if (currentTask != null)
                 {
                     finalizer = currentTask.ArbiterCleanupHandler;
                 }
                 else
                 {
                     finalizer = null;
                 }
                 currentTask = null;
             }
         }
         catch (Exception)
         {
             iteratorContext._iterator.Dispose();
             throw;
         }
         finally
         {
             if (flag2)
             {
                 iteratorContext._iterator.Dispose();
             }
         }
     }
 }
Пример #6
0
        private static bool RemoveCausality(string name, ICausality causality)
        {
            CausalityThreadContext currentThreadCausalities = Dispatcher.GetCurrentThreadCausalities();

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