WorkflowApplication.Run Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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.