WorkflowApplication.Run Methode

Definition

Beginnt oder setzt die Ausführung einer Workflowinstanz fort.

Überlädt

Name Beschreibung
Run()

Beginnt oder setzt die Ausführung einer Workflowinstanz fort.

Run(TimeSpan)

Beginnt oder setzt die Ausführung einer Workflowinstanz mithilfe des angegebenen Timeoutintervalls fort.

Hinweise

Rufen Sie diese Methode auf, um die Ausführung einer neu erstellten Workflowinstanz zu initiieren.

Run()

Beginnt oder setzt die Ausführung einer Workflowinstanz fort.

public:
 void Run();
public void Run();
member this.Run : unit -> unit
Public Sub Run ()

Beispiele

Im folgenden Beispiel wird ein Workflow mit WorkflowApplication gehostet. Eine WorkflowApplication Instanz wird mithilfe der angegebenen Workflowdefinition erstellt, die gewünschten Workflowlebenszyklusereignisse werden behandelt, und der Workflow wird mit einem Aufruf Runaufgerufen. Nach Abschluss des Workflows wird die folgende Ausgabe in der Konsole angezeigt.

Starting the workflow.
Workflow 593976e8-558d-4989-94d6-50a14b34fd7b Idle.
Ending the workflow.
Workflow 593976e8-558d-4989-94d6-50a14b34fd7b Completed
Workflow 593976e8-558d-4989-94d6-50a14b34fd7b Unloaded.
Activity wf = new Sequence
{
    Activities =
     {
         new WriteLine
         {
             Text = "Starting the workflow."
         },
         new Delay
         {
             Duration = TimeSpan.FromSeconds(5)
         },
         new WriteLine
         {
             Text = "Ending the workflow."
         }
     }
};

// Create a WorkflowApplication instance.
WorkflowApplication wfApp = new WorkflowApplication(wf);

// Subscribe to any desired workflow lifecycle events.
wfApp.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);

        // Outputs can be retrieved from the Outputs dictionary,
        // keyed by argument name.
        // Console.WriteLine("The winner is {0}.", e.Outputs["Winner"]);
    }
};

wfApp.Aborted = delegate(WorkflowApplicationAbortedEventArgs e)
{
    // Display the exception that caused the workflow
    // to abort.
    Console.WriteLine("Workflow {0} Aborted.", e.InstanceId);
    Console.WriteLine("Exception: {0}\n{1}",
        e.Reason.GetType().FullName,
        e.Reason.Message);
};

wfApp.Idle = delegate(WorkflowApplicationIdleEventArgs e)
{
    // Perform any processing that should occur
    // when a workflow goes idle. If the workflow can persist,
    // both Idle and PersistableIdle are called in that order.
    Console.WriteLine("Workflow {0} Idle.", e.InstanceId);
};

wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
{
    // Instruct the runtime to persist and unload the workflow
    return PersistableIdleAction.Unload;
};

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

wfApp.OnUnhandledException = delegate(WorkflowApplicationUnhandledExceptionEventArgs e)
{
    // Display the unhandled exception.
    Console.WriteLine("OnUnhandledException in Workflow {0}\n{1}",
        e.InstanceId, e.UnhandledException.Message);

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

    // Instruct the runtime to terminate the workflow.
    // Other choices are Abort and Cancel
    return UnhandledExceptionAction.Terminate;
};

// Run the workflow.
wfApp.Run();

Hinweise

Rufen Sie diese Methode auf, um die Ausführung einer neu erstellten Workflowinstanz zu initiieren.

Wenn der Ausführungsvorgang nicht innerhalb von 30 Sekunden abgeschlossen wird, wird ein TimeoutException Fehler ausgelöst.

Gilt für:

Run(TimeSpan)

Beginnt oder setzt die Ausführung einer Workflowinstanz mithilfe des angegebenen Timeoutintervalls fort.

public:
 void Run(TimeSpan timeout);
public void Run(TimeSpan timeout);
member this.Run : TimeSpan -> unit
Public Sub Run (timeout As TimeSpan)

Parameter

timeout
TimeSpan

Rufen Sie diese Methode auf, um die Ausführung einer neu erstellten Workflowinstanz zu initiieren.

Das Intervall, in dem der Ausführungsvorgang abgeschlossen werden muss, bevor der Vorgang abgebrochen wird und ein TimeoutException Fehler ausgelöst wird.

Beispiele

Im folgenden Beispiel wird ein Workflow mit WorkflowApplication gehostet. Eine WorkflowApplication Instanz wird mithilfe der angegebenen Workflowdefinition erstellt, die gewünschten Workflowlebenszyklusereignisse werden behandelt, und der Workflow wird mit einem Aufruf Runaufgerufen. Nach Abschluss des Workflows wird die folgende Ausgabe in der Konsole angezeigt.

Starting the workflow.
Workflow 593976e8-558d-4989-94d6-50a14b34fd7b Idle.
Ending the workflow.
Workflow 593976e8-558d-4989-94d6-50a14b34fd7b Completed
Workflow 593976e8-558d-4989-94d6-50a14b34fd7b Unloaded.
Activity wf = new Sequence
{
    Activities =
     {
         new WriteLine
         {
             Text = "Starting the workflow."
         },
         new Delay
         {
             Duration = TimeSpan.FromSeconds(5)
         },
         new WriteLine
         {
             Text = "Ending the workflow."
         }
     }
};

// Create a WorkflowApplication instance.
WorkflowApplication wfApp = new WorkflowApplication(wf);

// Subscribe to any desired workflow lifecycle events.
wfApp.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);

        // Outputs can be retrieved from the Outputs dictionary,
        // keyed by argument name.
        // Console.WriteLine("The winner is {0}.", e.Outputs["Winner"]);
    }
};

wfApp.Aborted = delegate(WorkflowApplicationAbortedEventArgs e)
{
    // Display the exception that caused the workflow
    // to abort.
    Console.WriteLine("Workflow {0} Aborted.", e.InstanceId);
    Console.WriteLine("Exception: {0}\n{1}",
        e.Reason.GetType().FullName,
        e.Reason.Message);
};

wfApp.Idle = delegate(WorkflowApplicationIdleEventArgs e)
{
    // Perform any processing that should occur
    // when a workflow goes idle. If the workflow can persist,
    // both Idle and PersistableIdle are called in that order.
    Console.WriteLine("Workflow {0} Idle.", e.InstanceId);
};

wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
{
    // Instruct the runtime to persist and unload the workflow
    return PersistableIdleAction.Unload;
};

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

wfApp.OnUnhandledException = delegate(WorkflowApplicationUnhandledExceptionEventArgs e)
{
    // Display the unhandled exception.
    Console.WriteLine("OnUnhandledException in Workflow {0}\n{1}",
        e.InstanceId, e.UnhandledException.Message);

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

    // Instruct the runtime to terminate the workflow.
    // Other choices are Abort and Cancel
    return UnhandledExceptionAction.Terminate;
};

// Run the workflow.
wfApp.Run();

Hinweise

Beachten Sie, dass im Gegensatz zu Invokedieser Methode ein Timeout nur ausgeführt wird, wenn der Workflow nicht in der angegebenen Zeitspanne beginnt, anstatt in der angegebenen Zeitspanne abzuschließen. Der Grund dafür ist, dass Invoke der Workflow synchron ausgeführt wird (den Hostthread blockieren), während Run er asynchron ausgeführt wird, nur den Hostthread für die Zeit blockiert, die der Workflow zum Starten benötigt.

Gilt für: