Share via


WorkflowInvoker.EndInvoke(IAsyncResult) Metodo

Definizione

Restituisce i risultati di un flusso di lavoro richiamati utilizzando uno degli overload BeginInvoke.

public:
 System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ EndInvoke(IAsyncResult ^ result);
public System.Collections.Generic.IDictionary<string,object> EndInvoke (IAsyncResult result);
member this.EndInvoke : IAsyncResult -> System.Collections.Generic.IDictionary<string, obj>
Public Function EndInvoke (result As IAsyncResult) As IDictionary(Of String, Object)

Parametri

result
IAsyncResult

Il IAsyncResult che fa riferimento all'operazione BeginInvoke che ha avviato il flusso di lavoro.

Restituisce

Un dizionario dei valori OutArgument e InOutArgument dell'attività radice con chiave basata sul nome dell'argomento che rappresentano gli output del flusso di lavoro.

Esempio

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. Questi vengono recuperati chiamando EndInvoke. Nella restituzione della chiamata a EndInvoke, ogni argomento di output viene restituito nel dizionario di output, con chiave basata sul nome dell'argomento.

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))
                }
            }
        };
    }
}
static void BeginInvokeExample()
{
    WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

    string userState = "BeginInvoke example";
    IAsyncResult result = invoker.BeginInvoke(new AsyncCallback(WorkflowCompletedCallback), userState);

    // You can inspect result from the host to determine if the workflow
    // is complete.
    Console.WriteLine("result.IsCompleted: {0}", result.IsCompleted);

    // The results of the workflow are retrieved by calling EndInvoke, which
    // can be called from the callback or from the host. If called from the
    // host, it blocks until the workflow completes. If a callback is not
    // required, pass null for the callback parameter.
    Console.WriteLine("Waiting for the workflow to complete.");
    IDictionary<string, object> outputs = invoker.EndInvoke(result);

    Console.WriteLine("The two dice are {0} and {1}.",
        outputs["D1"], outputs["D2"]);
}

static void WorkflowCompletedCallback(IAsyncResult result)
{
    Console.WriteLine("Workflow complete.");
}

Commenti

Per ricevere una notifica quando il flusso di lavoro è completo e recuperare i parametri di output del flusso di lavoro, chiamare EndInvoke dal metodo di callback specificato da BeginInvoke. Se viene chiamato EndInvoke prima che il flusso di lavoro venga completato, si blocca fino a che il flusso di lavoro viene completato.

Questo metodo restituisce il risultato di un flusso di lavoro richiamato in modo asincrono utilizzando il modello di struttura asincrono IAsyncResult. Per altre informazioni, vedere Panoramica della programmazione asincrona.

Si applica a