Metodo WorkflowInvoker.InvokeAsync (IDictionary<String, Object>, Object)

.NET Framework (current version)
 

Data di pubblicazione: novembre 2016

Richiama in modo asincrono un flusso di lavoro usando la definizione di flusso di lavoro e il IDictionary<TKey, TValue> specificato dei parametri di input e un identificatore univoco.

Spazio dei nomi:   System.Activities
Assembly:  System.Activities (in System.Activities.dll)

public void InvokeAsync(
	IDictionary<string, object> inputs,
	object userState
)

Parametri

inputs
Type: System.Collections.Generic.IDictionary<String, Object>

Il dizionario di parametri di input al flusso di lavoro codificati dal nome dell'argomento.

userState
Type: System.Object

Un oggetto fornito dall'utente utilizzato per distinguere questa particolare operazione invoke asincrona dalle altre operazioni invoke asincrone correnti.

Il parametro userState deve essere univoco attraverso tutto le operazioni attualmente in esecuzione InvokeAsync per l'attività corrente. Se userState non è univoco, viene generato un ArgumentException.userState viene utilizzato per identificare il flusso di lavoro in InvokeCompleted e per annullare il flusso di lavoro utilizzando CancelAsync.

Per ricevere una notifica quando il flusso di lavoro è completo, gestire il InvokeCompleted. Per configurare un intervallo di timeout nel quale il flusso di lavoro deve essere completato, usare uno degli overload InvokeAsync che accettano un oggetto TimeSpan.

Questo metodo richiama un flusso di lavoro in modo asincrono utilizzando il modello di struttura asincrono basato su eventi.Per altre informazioni, vedereEvent-based Asynchronous Pattern Overview.

Nell'esempio seguente viene richiamato un flusso di lavoro composto da un'attività LongRunningDiceRoll. L'attività LongRunningDiceRoll dispone di due argomenti di output che rappresentano i risultati dell'operazione di lancio dei dadi. Quando il flusso di lavoro viene completato questi vengono recuperati nel gestore InvokeCompleted.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

.NET Framework
Disponibile da 4.0
Torna all'inizio
Mostra: