Пример #1
0
 public void ClearAllWorkItems(ActivityExecutor executor)
 {
     if (this.firstWorkItem != null)
     {
         this.firstWorkItem.Release(executor);
         this.firstWorkItem = null;
         if (this.workItemQueue != null)
         {
             while (this.workItemQueue.Count > 0)
             {
                 this.workItemQueue.Dequeue().Release(executor);
             }
         }
     }
     this.workItemQueue = null;
 }
 public void ClearAllWorkItems(ActivityExecutor executor)
 {
     if (this.firstWorkItem != null)
     {
         this.firstWorkItem.Release(executor);
         this.firstWorkItem = null;
         if (this.workItemQueue != null)
         {
             while (this.workItemQueue.Count > 0)
             {
                 this.workItemQueue.Dequeue().Release(executor);
             }
         }
     }
     this.workItemQueue = null;
 }
Пример #3
0
 public Scheduler.RequestedAction ExecuteWorkItem(System.Activities.Runtime.WorkItem workItem)
 {
     if (FxTrace.ShouldTraceVerboseToTraceSource)
     {
         workItem.TraceStarting();
     }
     Scheduler.RequestedAction objA = this.activityExecutor.OnExecuteWorkItem(workItem);
     if (!object.ReferenceEquals(objA, Scheduler.YieldSilently))
     {
         if (this.activityExecutor.IsAbortPending || this.activityExecutor.IsTerminatePending)
         {
             objA = Scheduler.Abort;
         }
         workItem.Dispose(this.activityExecutor);
     }
     return(objA);
 }
Пример #4
0
 public void EnqueueWork(System.Activities.Runtime.WorkItem workItem)
 {
     if (this.firstWorkItem == null)
     {
         this.firstWorkItem = workItem;
     }
     else
     {
         if (this.workItemQueue == null)
         {
             this.workItemQueue = new Quack <System.Activities.Runtime.WorkItem>();
         }
         this.workItemQueue.Enqueue(workItem);
     }
     if (FxTrace.ShouldTraceVerboseToTraceSource)
     {
         workItem.TraceScheduled();
     }
 }
 public void EnqueueWork(System.Activities.Runtime.WorkItem workItem)
 {
     if (this.firstWorkItem == null)
     {
         this.firstWorkItem = workItem;
     }
     else
     {
         if (this.workItemQueue == null)
         {
             this.workItemQueue = new Quack<System.Activities.Runtime.WorkItem>();
         }
         this.workItemQueue.Enqueue(workItem);
     }
     if (FxTrace.ShouldTraceVerboseToTraceSource)
     {
         workItem.TraceScheduled();
     }
 }
Пример #6
0
 public void FillInstanceMap(ActivityInstanceMap instanceMap)
 {
     if (this.firstWorkItem != null)
     {
         ActivityInstanceMap.IActivityReference firstWorkItem = this.firstWorkItem as ActivityInstanceMap.IActivityReference;
         if (firstWorkItem != null)
         {
             instanceMap.AddEntry(firstWorkItem, true);
         }
         if ((this.workItemQueue != null) && (this.workItemQueue.Count > 0))
         {
             for (int i = 0; i < this.workItemQueue.Count; i++)
             {
                 firstWorkItem = this.workItemQueue[i] as ActivityInstanceMap.IActivityReference;
                 if (firstWorkItem != null)
                 {
                     instanceMap.AddEntry(firstWorkItem, true);
                 }
             }
         }
     }
 }
Пример #7
0
        private static void OnScheduledWork(object state)
        {
            Scheduler scheduler = (Scheduler)state;
            bool      flag      = FxTrace.Trace.ShouldTraceToTraceSource(TraceEventLevel.Informational);
            Guid      empty     = Guid.Empty;
            Guid      newId     = Guid.Empty;

            if (flag)
            {
                empty = DiagnosticTrace.ActivityId;
                newId = scheduler.callbacks.WorkflowInstanceId;
                FxTrace.Trace.SetAndTraceTransfer(newId, true);
                if (scheduler.resumeTraceRequired && TD.WorkflowActivityResumeIsEnabled())
                {
                    TD.WorkflowActivityResume(newId.ToString());
                }
            }
            scheduler.callbacks.ThreadAcquired();
            RequestedAction continueAction = Scheduler.continueAction;
            bool            flag2          = false;

            while (object.ReferenceEquals(continueAction, Scheduler.continueAction))
            {
                if (scheduler.IsIdle || scheduler.isPausing)
                {
                    flag2 = true;
                    break;
                }
                System.Activities.Runtime.WorkItem firstWorkItem = scheduler.firstWorkItem;
                if ((scheduler.workItemQueue != null) && (scheduler.workItemQueue.Count > 0))
                {
                    scheduler.firstWorkItem = scheduler.workItemQueue.Dequeue();
                }
                else
                {
                    scheduler.firstWorkItem = null;
                }
                continueAction = scheduler.callbacks.ExecuteWorkItem(firstWorkItem);
            }
            bool flag3       = false;
            bool isCompleted = false;

            if (flag2 || object.ReferenceEquals(continueAction, abortAction))
            {
                scheduler.isPausing = false;
                scheduler.isRunning = false;
                scheduler.NotifyWorkCompletion();
                flag3 = true;
                if (flag)
                {
                    isCompleted = scheduler.callbacks.IsCompleted;
                }
                scheduler.callbacks.SchedulerIdle();
            }
            else if (!object.ReferenceEquals(continueAction, yieldSilentlyAction))
            {
                NotifyUnhandledExceptionAction action2 = (NotifyUnhandledExceptionAction)continueAction;
                scheduler.isRunning = false;
                scheduler.NotifyWorkCompletion();
                flag3 = true;
                if (flag)
                {
                    isCompleted = scheduler.callbacks.IsCompleted;
                }
                scheduler.callbacks.NotifyUnhandledException(action2.Exception, action2.Source);
            }
            if (flag)
            {
                if (flag3)
                {
                    if (isCompleted)
                    {
                        if (TD.WorkflowActivityStopIsEnabled())
                        {
                            TD.WorkflowActivityStop(newId.ToString());
                        }
                    }
                    else if (TD.WorkflowActivitySuspendIsEnabled())
                    {
                        TD.WorkflowActivitySuspend(newId.ToString());
                    }
                }
                DiagnosticTrace.ActivityId = empty;
            }
        }
Пример #8
0
 public CallbackData(ActivityExecutor executor, System.Activities.Runtime.WorkItem workItem)
 {
     this.Executor = executor;
     this.WorkItem = workItem;
 }
 public void FillInstanceMap(ActivityInstanceMap instanceMap)
 {
     if (this.firstWorkItem != null)
     {
         ActivityInstanceMap.IActivityReference firstWorkItem = this.firstWorkItem as ActivityInstanceMap.IActivityReference;
         if (firstWorkItem != null)
         {
             instanceMap.AddEntry(firstWorkItem, true);
         }
         if ((this.workItemQueue != null) && (this.workItemQueue.Count > 0))
         {
             for (int i = 0; i < this.workItemQueue.Count; i++)
             {
                 firstWorkItem = this.workItemQueue[i] as ActivityInstanceMap.IActivityReference;
                 if (firstWorkItem != null)
                 {
                     instanceMap.AddEntry(firstWorkItem, true);
                 }
             }
         }
     }
 }