Udostępnij za pośrednictwem


WorkflowApplication.Run Metoda

Definicja

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

Przeciążenia

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 polecenia WorkflowApplication. WorkflowApplication Wystąpienie jest tworzone przy użyciu określonej definicji przepływu pracy, obsługiwane są żądane zdarzenia cyklu życia przepływu pracy, a przepływ pracy jest wywoływany za pomocą wywołania metody Run. Po zakończeniu przepływu pracy do konsoli zostaną wyświetlone następujące dane wyjściowe.

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 błąd.

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 TimeoutException operacji i zostanie zgłoszony.

Przykłady

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

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 rozpoczyna się w określonym czasie, a nie musi być ukończony w określonym czasie. Przyczyną tego jest Invoke wykonanie synchronicznego przepływu pracy (blokowanie wątku hosta) podczas Run wykonywania asynchronicznego tylko blokowania wątku hosta przez czas potrzebny na uruchomienie przepływu pracy.

Dotyczy