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); } }
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); }
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); }
internal static CausalityThreadContext CloneCausalitiesFromCurrentThread() { if (!Dispatcher._causalitiesActive) { return(null); } CausalityThreadContext currentThreadCausalities = Dispatcher.GetCurrentThreadCausalities(); if (CausalityThreadContext.IsEmpty(currentThreadCausalities)) { return(null); } return(currentThreadCausalities.Clone()); }
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(); } } } }
private static bool RemoveCausality(string name, ICausality causality) { CausalityThreadContext currentThreadCausalities = Dispatcher.GetCurrentThreadCausalities(); return(!CausalityThreadContext.IsEmpty(currentThreadCausalities) && currentThreadCausalities.RemoveCausality(name, causality)); }