我是Windows Workflow的新手并尝试编写长时间运行流程 我也试图限制这个过程可以运行多长时间 我正在调用WorkflowInvoker.Invoke来触发我的Workflow传递它一小段时间进行测试。
如果我尝试这些活动,这似乎完美无缺 但是,如果我使用CodeActivity,它似乎完全忽略了我的超时。
这是为什么?如果花费太长时间,我如何使CodeActivity超时?
使用延迟活动的示例:
(在此示例中抛出TimeOutException)
Activity wf = new Sequence()
{
Activities =
{
new Delay()
{
Duration = TimeSpan.FromSeconds(10)
},
}
};
try
{
WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(5));
}
catch (TimeoutException ex)
{
Console.WriteLine(ex.Message);
}
尝试使用CodeActivity的示例:
(在此示例中,不抛出TimeOutException)
public class LongActivity : CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
Thread.Sleep(TimeSpan.FromSeconds(10));
}
}
Activity wf = new Sequence()
{
Activities =
{
new LongActivity()
}
};
try
{
WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(5));
}
catch (TimeoutException ex)
{
Console.WriteLine(ex.Message);
}
答案 0 :(得分:0)
工作流运行时只能在负责时执行操作,如果您的活动需要10秒才能执行或休眠,则运行时无法对其执行任何操作。它不会安排任何新的活动,因为没有剩余的时间,而是会抛出TimeoutException。
通常,当您长时间运行时,您将使用异步活动,AsyncCodeActivity或带有书签的NativeActivity,以便运行时处于控制状态并可以中止工作流。