WorkflowInstance.EnqueueItemOnIdle Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Posta uma mensagem na fila de fluxo de trabalho especificada quando o fluxo de trabalho está ocioso. EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) espera até que o fluxo de trabalho atinja um ponto de ociosidade e seja enfileirado depois de verificar se o agendador de fluxo de trabalho está ocioso (ou seja, se nenhuma operação ativa está sendo executada).
public:
void EnqueueItemOnIdle(IComparable ^ queueName, System::Object ^ item, System::Workflow::Runtime::IPendingWork ^ pendingWork, System::Object ^ workItem);
public void EnqueueItemOnIdle (IComparable queueName, object item, System.Workflow.Runtime.IPendingWork pendingWork, object workItem);
member this.EnqueueItemOnIdle : IComparable * obj * System.Workflow.Runtime.IPendingWork * obj -> unit
Public Sub EnqueueItemOnIdle (queueName As IComparable, item As Object, pendingWork As IPendingWork, workItem As Object)
Parâmetros
- queueName
- IComparable
O nome do WorkflowQueue.
- item
- Object
O objeto a ser enfileirado.
- pendingWork
- IPendingWork
Um IPendingWork que permite que o remetente seja notificado quando um item
for entregue.
- workItem
- Object
Um objeto a ser passado para os métodos IPendingWork.
Exceções
queueName
é uma referência nula (Nothing
no Visual Basic).
O mecanismo de runtime de fluxo de trabalho não está em execução.
- ou - A instância de fluxo de trabalho é suspensa.
- ou -
A WorkflowQueue especificada por queueName
não existe.
- ou -
A WorkflowQueue especificada por queueName
não está habilitada.
Exemplos
O exemplo a seguir demonstra o envio de informações para uma instância de fluxo de trabalho usando o EnqueueItemOnIdle
método. Primeiro, um objeto WorkflowInstance é criado e iniciado; em seguida, um objeto que implementa a IPendingWork interface é criado. EnqueueItemOnIdle
em seguida, é chamado, passando valores de cadeia de caracteres para o nome da fila, o item enfileirado e o item de trabalho a ser passado para os métodos do objeto pendingWork.
// Create a workflow runtime environment
WorkflowRuntime workflowRuntime = new WorkflowRuntime();
// Create a new instance of the out-of-box SqlWorkflowPersistenceService.
// Use the non-locking constructor, since we're only creating a single Workflow Runtime.
NameValueCollection parameters = new NameValueCollection();
parameters.Add("ConnectionString",
"Initial Catalog=SqlPersistenceService;Data Source=localhost;Integrated Security=SSPI;");
//Set UnloadOnIdle to true, so that the service will persist the workflow
parameters.Add("UnloadOnIdle", "true");
SqlWorkflowPersistenceService persistenceService =
new SqlWorkflowPersistenceService(parameters);
// Add the service to the runtime
workflowRuntime.AddService(persistenceService);
// Create a WorkflowInstance object
WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(Workflow1));
// Start the instance
workflowInstance.Start();
// Create an instance of a class that implements IPendingWork for notification
PendingService pendingWork = new PendingService();
// Send the workflow the message
workflowInstance.EnqueueItemOnIdle("ActionQueue", "StartWork", pendingWork, "ActionItem");
' Create a workflow runtime environment
Dim workflowRuntime As New WorkflowRuntime()
' Create a new instance of the out-of-box SqlWorkflowPersistenceService.
' Use the non-locking constructor, since we're only creating a single Workflow Runtime.
Dim parameters As New NameValueCollection()
parameters.Add("ConnectionString", _
"Initial Catalog=SqlPersistenceServiceData Source=localhostIntegrated Security=SSPI")
'Set UnloadOnIdle to true, so that the service will persist the workflow
parameters.Add("UnloadOnIdle", "true")
Dim persistenceService As _
New SqlWorkflowPersistenceService(parameters)
' Add the service to the runtime
workflowRuntime.AddService(persistenceService)
' Create a WorkflowInstance object
Dim workflowInstance As WorkflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
' Start the instance
workflowInstance.Start()
' Create an instance of a class that implements IPendingWork for notification
Dim pendingWork As New PendingService()
' Send the workflow the message
workflowInstance.EnqueueItemOnIdle("ActionQueue", "StartWork", pendingWork, "ActionItem")
Comentários
Aguarda a instância do fluxo de trabalho ficar ociosa e, em seguida, envia o item
para o especificado WorkflowQueue. Se você chamar EnqueueItemOnIdle enquanto a instância do fluxo de trabalho estiver suspensa, o mecanismo de runtime do fluxo de trabalho gerará um InvalidOperationException. Se você quiser ser notificado quando a mensagem for entregue, poderá implementar IPendingWork em seu serviço e passar um workItem
e um IPendingWork objeto para EnqueueItem. Se você não quiser essa notificação, poderá passar uma referência nula (Nothing
em Visual Basic) para pendingWork
e workItem
.
Quando você estiver usando esse método com um fluxo de trabalho do computador de estado, poderá obter uma exceção que contenha a mensagem "Fila '{0}' não está habilitada". Isso ocorre quando o estado atual do computador de estado não sabe como lidar com um evento específico. Por exemplo, quando algum estado diferente do estado atual contém o EventDrivenActivity que contém o HandleExternalEventActivity que é representado pela fila '{0}'.