WorkflowInstance.GetWorkflowQueueData Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает коллекцию объектов WorkflowQueueInfo, которая содержит ожидающие элементы и подписанные действия для очередей рабочего процесса, связанных с данным экземпляром рабочего процесса.
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)
Возвращаемое значение
Коллекция ReadOnlyCollection<T> объектов WorkflowQueueInfo.
Исключения
Механизм среды выполнения рабочих процессов не работает.
Примеры
В следующем примере кода показано использование метода GetWorkflowQueueData для получения данных о состоянии всех очередей рабочего процесса, связанных с объектом WorkflowInstance. При возникновении события WorkflowIdled вызывается метод OnWorkflowIdled
, определенный в этом примере. Он определяет, какой рабочий процесс бездействует, используя свойство WorkflowInstance, а затем возвращает коллекцию элементов, находящихся в очереди экземпляра рабочего потока, вызывая метод GetWorkflowQueueData. Код выполняет перебор элементов коллекции, чтобы определить, какое действие ожидает события, которое привело к бездействию рабочего процесса. После этого он отправляет исключение в очередь рабочего процесса, используя метод EnqueueItem с именем элемента очереди событий.
Данный пример кода является частью примера SDK «Canceling a Workflow» из файла Program.cs. Дополнительные сведения см. в разделе Отмена рабочего процесса.
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
Комментарии
GetWorkflowQueueData возвращает коллекцию объектов WorkflowQueueInfo, каждый из которых содержит сведения о состоянии одной из очередей рабочего процесса, связанных с данным экземпляром рабочего процесса. WorkflowQueueInfo.Items содержит ожидающие элементы для WorkflowQueue, а WorkflowQueueInfo.SubscribedActivityNames содержит список действий, подписанных на доставку элементов для WorkflowQueue.