【问题标题】:Workflow (WF) lifecycle events工作流 (WF) 生命周期事件
【发布时间】:2016-09-27 06:33:26
【问题描述】:

如果我在program.cs 中有以下“工作流生命周期事件”。

无法理解WaitOne() 会等待哪个信号到达?

Completed 的优先级最高还是idle 的优先级最高,或者无论什么信号到达,它都会收到?

app.Run();
syncEvent.WaitOne();



app.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
{
    return PersistableIdleAction.Unload;   
};

app.Unloaded = delegate(WorkflowApplicationEventArgs e)
{
    Console.WriteLine("Workflow {0} Unloaded.", e.InstanceId);  
    syncEvent.Set();
};


app.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
{
    if (e.CompletionState == ActivityInstanceState.Faulted)
    {
        Console.WriteLine("Workflow {0} Terminated.", e.InstanceId);
        Console.WriteLine("Exception: {0}\n{1}",
            e.TerminationException.GetType().FullName,
            e.TerminationException.Message);
    }
    else if (e.CompletionState == ActivityInstanceState.Canceled)
    {
        Console.WriteLine("Workflow {0} Canceled.", e.InstanceId);
    }
    else
    {
        Console.WriteLine("Workflow {0} Completed.", e.InstanceId);
    }
};

app.Aborted = delegate(WorkflowApplicationAbortedEventArgs e)
{
    Console.WriteLine("Workflow {0} Aborted.", e.InstanceId);
    Console.WriteLine("Exception: {0}\n{1}",
        e.Reason.GetType().FullName,
        e.Reason.Message);
};

app.Idle = delegate(WorkflowApplicationIdleEventArgs e)
{
    Console.WriteLine("Workflow {0} Idle.", e.InstanceId);
};

app.OnUnhandledException = delegate(WorkflowApplicationUnhandledExceptionEventArgs e)
{
    Console.WriteLine("OnUnhandledException in Workflow {0}\n{1}",
        e.InstanceId, e.UnhandledException.Message);

    Console.WriteLine("ExceptionSource: {0} - {1}",
        e.ExceptionSource.DisplayName, e.ExceptionSourceInstanceId);
    return UnhandledExceptionAction.Terminate;
};

【问题讨论】:

    标签: .net workflow workflow-foundation-4 workflow-foundation persist


    【解决方案1】:

    您的“Unloaded”事件处理程序会:

    syncEvent.Set();
    

    这会让等待继续。

    事件没有优先级,您可以按照它们发生的顺序来获取它们。

    【讨论】:

    • syncEvent.Set() - 据我了解,这会将事件的状态设置为已发出信号,从而允许一个或多个等待线程继续进行。它将如何等待继续?
    • 你的主线程调用了syncEvent.WaitOne(),它就坐在那里等到另一个线程调用syncEvent.Set(),这允许你的主线程继续。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多