TheKingPinMirza
TheKingPinMirza

Reputation: 8952

Workflow (WF) lifecycle events

If i have following 'Workflow lifecycle events' in my program.cs.

Unable to understand that WaitOne() will wait for which signal to arrive?

Does Completed has the highest priority or idle has the highest priority or whatever signal arrives, it will receive?

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;
};

Upvotes: 0

Views: 102

Answers (1)

John Vottero
John Vottero

Reputation: 925

Your "Unloaded" event handler does:

syncEvent.Set();

That will let the wait continue.

The events don't have priorities, you get them in the order in which they occur.

Upvotes: 1

Related Questions