代码之家  ›  专栏  ›  技术社区  ›  WebDude

工作流4代码活动未引发TimeoutException

  •  0
  • WebDude  · 技术社区  · 14 年前

    我不熟悉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);
    }
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   Maurice    14 年前

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

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