我不熟悉Windows工作流,尝试编写一个长时间运行的流程。
我还试图限制这个过程的运行时间。
我正在调用WorkflowInvoker.Invoke以触发我的工作流,并将其传递一小段时间跨度以进行测试。
如果我尝试这种特定的活动,这似乎是完美的工作。
但是如果我使用代码活动,它似乎完全忽略了我的超时。
为什么会这样?如果代码活动花费的时间太长,我如何使其超时?
使用延迟活动的示例:
(在本例中,抛出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);
}