public AutomationUnit(IAutomation automation, AutomationContext context, DelegateAutomationDone callback, object stateObject, AutomationUnit callingUnit) { _automation = automation; _context = context; _callback = callback; _callbackStateObject = stateObject; _callingUnit = callingUnit; }
void NotifyWaitUnit(IAutomation automation, AutomationUnit callingUnit) { if (callingUnit != null) { int index = _waitForCompleteList.IndexOf(callingUnit); if (index >= 0 && index < _waitForCompleteList.Count) { AutomationUnit waitUnit = _waitForCompleteList[index] as AutomationUnit; IAutomation waitAutomation = waitUnit.Automation; if (waitAutomation.Success == automation) { waitAutomation.Success = null; } else if (waitAutomation.Failure == automation) { waitAutomation.Failure = null; } else if (waitAutomation.Complete == automation) { waitAutomation.Complete = null; } switch (waitAutomation.Result) { case AutomationResult.Success: if (waitAutomation.Success == null && waitAutomation.Complete == null) { if (waitUnit.Callback != null) { waitUnit.Callback.Invoke(waitUnit.CallbackStateObject); } if (waitUnit.CallingUnit != null) { NotifyWaitUnit(waitAutomation, waitUnit.CallingUnit); } _waitForCompleteList.Remove(waitUnit); } break; case AutomationResult.Failure: if (waitAutomation.Failure == null && waitAutomation.Complete == null) { if (waitUnit.Callback != null) { waitUnit.Callback.Invoke(waitUnit.CallbackStateObject); } if (waitUnit.CallingUnit != null) { NotifyWaitUnit(waitAutomation, waitUnit.CallingUnit); } _waitForCompleteList.Remove(waitUnit); } break; } } } }
/// <summary> /// 等待后续完成 /// </summary> /// <param name="automationUnit"></param> private void WaitForComplete(AutomationUnit automationUnit) { _toBeWaitList.Add(automationUnit); }
/// <summary> /// 删除自动化作业 /// </summary> private void Remove(AutomationUnit automationUnit) { _toBeDelList.Add(automationUnit); }
/// <summary> /// 执行自动化作业 /// </summary> /// <remarks>作业上下文会在这个函数内部被复制,从而保证作业各自的上下文不会互相干扰,而只能对各自的后续作业产生影响</remarks> public void Do(IAutomation automation, AutomationContext context, DelegateAutomationDone callback, object stateObject, AutomationUnit callingUnit) { if (automation == null) { throw new ArgumentNullException("automation"); } if (context == null) { throw new ArgumentNullException("context"); } _toBeAddList.Add(new AutomationUnit(automation, (AutomationContext)context.Clone(), callback, stateObject, callingUnit)); }
/// <summary> /// 执行自动化作业 /// </summary> /// <remarks>简化版,免回调</remarks> public void Do(IAutomation automation, AutomationContext context, AutomationUnit callingUnit) { Do(automation, context, null, null, callingUnit); }