Język

WorkflowApplication.Run Metoda

Definicja

Rozpoczyna lub wznawia wykonywanie wystąpienia przepływu pracy.

Przeciążenia

Nazwa Opis
Run()

Rozpoczyna lub wznawia wykonywanie wystąpienia przepływu pracy.

Run(TimeSpan)

Rozpoczyna lub wznawia wykonywanie wystąpienia przepływu pracy przy użyciu określonego interwału limitu czasu.

Uwagi

Wywołaj tę metodę, aby zainicjować wykonywanie nowo utworzonego wystąpienia przepływu pracy.

Run()

Rozpoczyna lub wznawia wykonywanie wystąpienia przepływu pracy.

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

Przykłady

Poniższy przykład hostuje przepływ pracy przy użyciu WorkflowApplication. Wystąpienie WorkflowApplication jest tworzone przy użyciu określonej definicji przepływu pracy, obsługiwane są zdarzenia cyklu życia żądanego przepływu pracy, a przepływ pracy jest wywoływany za pomocą wywołania metody Run. Po zakończeniu przepływu pracy następujące dane wyjściowe zostaną wyświetlone w konsoli programu .

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();

Uwagi

Wywołaj tę metodę, aby zainicjować wykonywanie nowo utworzonego wystąpienia przepływu pracy.

Jeśli operacja uruchamiania nie zostanie ukończona w ciągu 30 sekund, TimeoutException zostanie zgłoszony element .

Dotyczy

Run(TimeSpan)

Rozpoczyna lub wznawia wykonywanie wystąpienia przepływu pracy przy użyciu określonego interwału limitu czasu.

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

Parametry

timeout
TimeSpan

Wywołaj tę metodę, aby zainicjować wykonywanie nowo utworzonego wystąpienia przepływu pracy.

Interwał, w którym operacja uruchamiania musi zostać ukończona przed anulowaniem operacji i jest TimeoutException zgłaszany.

Przykłady

Poniższy przykład hostuje przepływ pracy przy użyciu WorkflowApplication. Wystąpienie WorkflowApplication jest tworzone przy użyciu określonej definicji przepływu pracy, obsługiwane są zdarzenia cyklu życia żądanego przepływu pracy, a przepływ pracy jest wywoływany za pomocą wywołania metody Run. Po zakończeniu przepływu pracy następujące dane wyjściowe zostaną wyświetlone w konsoli programu .

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();

Uwagi

Należy pamiętać, że w przeciwieństwie do Invokemetody ta metoda przekracza limit czasu tylko wtedy, gdy przepływ pracy nie zostanie uruchomiony w określonym czasie, a nie musi być ukończony w określonym czasie. Przyczyną jest to, że Invoke wykonuje przepływ pracy synchronicznie (blokując wątek hosta), podczas gdy Run jest wykonywany asynchronicznie, blokuje tylko wątek hosta przez czas potrzebny na uruchomienie przepływu pracy.

Dotyczy