【问题标题】:Workflow 4 CodeActivity not throwing TimeoutException工作流 4 CodeActivity 不抛出 TimeoutException
【发布时间】:2010-07-01 19:37:05
【问题描述】:

我是 Windows 工作流的新手,正在尝试编写一个长时间运行的进程。
我还试图限制这个过程可以运行多长时间。
我正在调用 WorkflowInvoker.Invoke 来触发我的工作流,通过它进行测试。

如果我尝试某些活动,这似乎很有效。
但如果我使用 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);
}

【问题讨论】:

    标签: workflow-foundation-4 timeoutexception


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多