WorkflowInstance.GetWorkflowQueueData 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.
Pobiera kolekcję WorkflowQueueInfo obiektów zawierających oczekujące elementy i subskrybowane działania dla kolejek przepływu pracy skojarzonych z tym wystąpieniem przepływu pracy.
public:
System::Collections::ObjectModel::ReadOnlyCollection<System::Workflow::Runtime::WorkflowQueueInfo ^> ^ GetWorkflowQueueData();
public System.Collections.ObjectModel.ReadOnlyCollection<System.Workflow.Runtime.WorkflowQueueInfo> GetWorkflowQueueData ();
member this.GetWorkflowQueueData : unit -> System.Collections.ObjectModel.ReadOnlyCollection<System.Workflow.Runtime.WorkflowQueueInfo>
Public Function GetWorkflowQueueData () As ReadOnlyCollection(Of WorkflowQueueInfo)
Zwraca
A ReadOnlyCollection<T> obiektów WorkflowQueueInfo .
Wyjątki
Aparat środowiska uruchomieniowego przepływu pracy nie jest uruchomiony.
Przykłady
Poniższy przykład kodu pokazuje, jak za pomocą GetWorkflowQueueData metody można uzyskać informacje o stanie wszystkich kolejek przepływu pracy skojarzonych z obiektem WorkflowInstance . Po wystąpieniu zdarzenia wywoływana WorkflowIdled jest metoda zdefiniowana OnWorkflowIdled
w tym przykładzie. Określa, który przepływ pracy jest bezczynny przy użyciu WorkflowInstance właściwości, a następnie pobiera kolekcję elementów w kolejce dla wystąpienia przepływu pracy przez wywołanie GetWorkflowQueueData metody . Kod wykonuje iterację w kolekcji, aby określić, które działanie oczekuje na zdarzenie, które bezczynnie przepływ pracy. Następnie wysyła wyjątek do kolejki przepływu pracy przy użyciu EnqueueItem metody wraz z nazwą elementu kolejki zdarzeń.
Ten przykład kodu jest częścią przykładu Canceling a Workflow SDK from the Program.cs file (Anulowanie zestawu SDK przepływu pracy z pliku Program.cs). Aby uzyskać więcej informacji, zobacz Anulowanie przepływu pracy.
static void OnWorkflowIdled(object sender, WorkflowEventArgs e)
{
WorkflowInstance workflow = e.WorkflowInstance;
Console.WriteLine("\n...waiting for 3 seconds... \n");
Thread.Sleep(3000);
// what activity is blocking the workflow
ReadOnlyCollection<WorkflowQueueInfo> wqi = workflow.GetWorkflowQueueData();
foreach (WorkflowQueueInfo q in wqi)
{
EventQueueName eq = q.QueueName as EventQueueName;
if (eq != null)
{
// get activity that is waiting for event
ReadOnlyCollection<string> blockedActivity = q.SubscribedActivityNames;
Console.WriteLine("Host: Workflow is blocked on " + blockedActivity[0]);
// this event is never going to arrive eg. employee left the company
// lets send an exception to this queue
// it will either be handled by exception handler that was modeled in workflow
// or the runtime will unwind running compensation handlers and exit the workflow
Console.WriteLine("Host: This event is not going to arrive");
Console.WriteLine("Host: Cancel workflow with unhandled exception");
workflow.EnqueueItem(q.QueueName, new Exception("ExitWorkflowException"), null, null);
}
}
}
Shared Sub OnWorkflowIdled(ByVal sender As Object, ByVal e As WorkflowEventArgs)
Dim workflow As WorkflowInstance = e.WorkflowInstance
Console.WriteLine(vbCrLf + "...waiting for 3 seconds... " + vbCrLf)
Thread.Sleep(3000)
' what activity is blocking the workflow
Dim wqi As ReadOnlyCollection(Of WorkflowQueueInfo) = workflow.GetWorkflowQueueData()
For Each q As WorkflowQueueInfo In wqi
Dim eq As EventQueueName = TryCast(q.QueueName, EventQueueName)
If eq IsNot Nothing Then
' get activity that is waiting for event
Dim blockedActivity As ReadOnlyCollection(Of String) = q.SubscribedActivityNames
Console.WriteLine("Host: Workflow is blocked on " + blockedActivity(0))
' this event is never going to arrive eg. employee left the company
' lets send an exception to this queue
' it will either be handled by exception handler that was modeled in workflow
' or the runtime will unwind running compensation handlers and exit the workflow
Console.WriteLine("Host: This event is not going to arrive")
Console.WriteLine("Host: Cancel workflow with unhandled exception")
workflow.EnqueueItem(q.QueueName, New Exception("ExitWorkflowException"), Nothing, Nothing)
End If
Next
End Sub
Uwagi
GetWorkflowQueueData Zwraca kolekcję WorkflowQueueInfo obiektów, z których każda zawiera informacje o stanie jednej z kolejek przepływu pracy skojarzonych z tym wystąpieniem przepływu pracy. WorkflowQueueInfo.Items zawiera oczekujące elementy elementu WorkflowQueue i WorkflowQueueInfo.SubscribedActivityNames zawiera listę działań, które są subskrybowane na potrzeby dostarczania elementów w elemencie WorkflowQueue.