本文整理汇总了C#中IEngine.Rescure方法的典型用法代码示例。如果您正苦于以下问题:C# IEngine.Rescure方法的具体用法?C# IEngine.Rescure怎么用?C# IEngine.Rescure使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IEngine
的用法示例。
在下文中一共展示了IEngine.Rescure方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Transit
public void Transit(WorkItem workItem, IEngine engine)
{
if (workItem == null) throw new ArgumentNullException("workItem");
if (workItem.Type != WorkflowType.Retry) throw new ArgumentException("type must be retry");
var status = workItem.Status;
switch (status)
{
case WorkItemStatus.Created:
_repository.DeleteChildren(workItem.Id);
var children = _workItemBuilder.BuildChildren(workItem);
_repository.AddAll(children);
workItem.Status = WorkItemStatus.WaitingForChildren;
_repository.Update(workItem);
engine.Kick(workItem.Id);
break;
case WorkItemStatus.WaitingForChildren:
var last = _repository.GetLastChildByOrder(workItem.Id);
var definition = (RetryBlock) _navigator.Find(workItem.WorkflowPath);
switch (last.Status)
{
case WorkItemStatus.Created:
engine.Kick(last.Id);
break;
case WorkItemStatus.Completed:
workItem.OutputId = last.OutputId;
workItem.Status = WorkItemStatus.Completed;
_repository.Update(workItem);
engine.Kick(workItem.ParentId);
break;
case WorkItemStatus.Failed:
if (last.Order < definition.RetryCount)
{
var newItem = last.Retry();
_repository.Add(newItem);
engine.Kick(newItem.Id);
}
else
{
workItem.ExceptionId = last.ExceptionId;
workItem.Status = WorkItemStatus.Failed;
_repository.Update(workItem);
engine.Rescure(workItem.Id);
}
break;
}
break;
}
}