WorkflowInstance.GetWorkflowQueueData Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá kolekci WorkflowQueueInfo objektů, která obsahuje čekající položky a odebírané aktivity pro fronty pracovního postupu přidružené k této instanci pracovního postupu.
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)
Návraty
A ReadOnlyCollection<T> objektů WorkflowQueueInfo .
Výjimky
Modul runtime pracovního postupu není spuštěný.
Příklady
Následující příklad kódu ukazuje, jak můžete použít metodu GetWorkflowQueueData k získání informací o stavu všech front pracovního postupu přidružených k objektu WorkflowInstance . Když dojde k WorkflowIdled události, volá se OnWorkflowIdled
metoda definovaná v tomto příkladu. Určuje, který pracovní postup je nečinný pomocí WorkflowInstance vlastnosti, a pak získá kolekci položek ve frontě pro instanci pracovního postupu voláním GetWorkflowQueueData metody. Kód iteruje kolekci, aby zjistil, která aktivita čeká na událost, která pracovní postup nečinila. Pak odešle výjimku do fronty pracovního postupu pomocí EnqueueItem metody spolu s názvem položky fronty událostí.
Tento příklad kódu je součástí ukázky Zrušení sady SDK pracovního postupu ze souboru Program.cs. Další informace najdete v tématu Zrušení pracovního postupu.
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
Poznámky
GetWorkflowQueueData vrátí kolekci WorkflowQueueInfo objektů, z nichž každý obsahuje informace o stavu jedné z front pracovního postupu přidružených k této instanci pracovního postupu. WorkflowQueueInfo.Items obsahuje nevyřízené WorkflowQueue položky pro a WorkflowQueueInfo.SubscribedActivityNames obsahuje seznam aktivit, které jsou přihlášeny k odběru pro doručování položek na WorkflowQueue.