WorkflowApplication.Run Metodo

Definizione

Inizia o riprende l'esecuzione di un'istanza del flusso di lavoro.Begins or resumes the execution of a workflow instance.

Overload

Run()

Inizia o riprende l'esecuzione di un'istanza del flusso di lavoro.Begins or resumes the execution of a workflow instance.

Run(TimeSpan)

Inizia o riprende l'esecuzione di un'istanza del flusso di lavoro utilizzando l'intervallo di timeout specificato.Begins or resumes the execution of a workflow instance using the specified time-out interval.

Commenti

Chiamare questo metodo per iniziare l'esecuzione di un'istanza del flusso di lavoro appena creata.Call this method to initiate execution of a newly created workflow instance.

Run()

Inizia o riprende l'esecuzione di un'istanza del flusso di lavoro.Begins or resumes the execution of a workflow instance.

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

Esempi

Nell'esempio seguente viene ospitato un flusso di lavoro tramite WorkflowApplication.The following example hosts a workflow using WorkflowApplication. Un'istanza WorkflowApplication viene costruita utilizzando la definizione di flusso di lavoro specificata, vengono gestiti gli eventi del ciclo di vita del flusso di lavoro desiderati e il flusso di lavoro viene richiamato con una chiamata a Run.A WorkflowApplication instance is constructed using the specified workflow definition, the desired workflow lifecycle events are handled, and the workflow is invoked with a call to Run. Quando il flusso di lavoro viene completato, l'output seguente viene visualizzato nella console.When the workflow is completed, the following output is displayed to the console.

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

Commenti

Chiamare questo metodo per iniziare l'esecuzione di un'istanza del flusso di lavoro appena creata.Call this method to initiate execution of a newly created workflow instance.

Se l'operazione di esecuzione non è completata entro 30 secondi, è generato un TimeoutException.If the run operation does not complete within 30 seconds, a TimeoutException is thrown.

Run(TimeSpan)

Inizia o riprende l'esecuzione di un'istanza del flusso di lavoro utilizzando l'intervallo di timeout specificato.Begins or resumes the execution of a workflow instance using the specified time-out interval.

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

Parametri

timeout
TimeSpan

Chiamare questo metodo per iniziare l'esecuzione di un'istanza del flusso di lavoro appena creata.Call this method to initiate execution of a newly created workflow instance.

Intervallo nel quale l'operazione di esecuzione deve essere completata prima che l'operazione sia annullata e venga generato un TimeoutException.The interval in which the run operation must complete before the operation is canceled and a TimeoutException is thrown.

Esempi

Nell'esempio seguente viene ospitato un flusso di lavoro tramite WorkflowApplication.The following example hosts a workflow using WorkflowApplication. Un'istanza WorkflowApplication viene costruita utilizzando la definizione di flusso di lavoro specificata, vengono gestiti gli eventi del ciclo di vita del flusso di lavoro desiderati e il flusso di lavoro viene richiamato con una chiamata a Run.A WorkflowApplication instance is constructed using the specified workflow definition, the desired workflow lifecycle events are handled, and the workflow is invoked with a call to Run. Quando il flusso di lavoro viene completato, l'output seguente viene visualizzato nella console.When the workflow is completed, the following output is displayed to the console.

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

Commenti

Si noti che diversamente da Invoke, questo metodo raggiungerà il timeout solo se il flusso di lavoro non inizia nel periodo di tempo specificato, piuttosto che dover essere completato entro il periodo di tempo specificato.Note that unlike Invoke, this method will time out only if the workflow doesn't start in the specified amount of time, rather than needing to complete in the specified amount of time. Ciò è dovuto al fatto che Invoke esegue il flusso di lavoro in modo sincrono (bloccando il thread host), mentre Run lo esegue in modo asincrono, solo bloccando il thread host per il periodo di tempo richiesto per iniziare il flusso di lavoro.The reason for this is that Invoke executes the workflow synchronously (blocking the host thread), while Run executes asynchronously, only blocking the host thread for the amount of time it takes the workflow to start.

Si applica a