工作流4 CodeActivity不会抛出TimeoutException

时间:2010-07-01 19:37:05

标签: workflow-foundation-4 timeoutexception

我是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);
}

1 个答案:

答案 0 :(得分:0)

工作流运行时只能在负责时执行操作,如果您的活动需要10秒才能执行或休眠,则运行时无法对其执行任何操作。它不会安排任何新的活动,因为没有剩余的时间,而是会抛出TimeoutException。

通常,当您长时间运行时,您将使用异步活动,AsyncCodeActivity或带有书签的NativeActivity,以便运行时处于控制状态并可以中止工作流。