Compartir a través de


WorkflowInvoker.EndInvoke(IAsyncResult) Método

Definición

Devuelve los resultados de un flujo de trabajo invocado mediante una de las sobrecargas 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)

Parámetros

result
IAsyncResult

IAsyncResult que hace referencia a la operación del método BeginInvoke que inició el flujo de trabajo.

Devoluciones

Diccionario de los valores OutArgument e InOutArgument de la actividad raíz ordenados por nombre de argumento que representan las salidas del flujo de trabajo.

Ejemplos

En el siguiente ejemplo se invoca un flujo de trabajo formado por una actividad LongRunningDiceRoll. La actividad LongRunningDiceRoll tiene dos argumentos de salida que representan los resultados de la operación de tirar los dados. Se recuperan llamando al método EndInvoke. Cuando la llamada al método EndInvoke devuelve resultados, cada uno de los argumentos de salida se devuelve en el diccionario de salidas, ordenados por nombre de argumento.

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.");
}

Comentarios

Para recibir una notificación cuando se complete el flujo de trabajo y recuperar los parámetros de salida de dicho flujo de trabajo, llame a EndInvoke desde el método callback especificado por BeginInvoke. Si se llama al método EndInvoke antes de que se complete el flujo de trabajo, la llamada queda bloqueada hasta que se completa el flujo de trabajo.

Este método devuelve el resultado de un flujo de trabajo invocado de forma asincrónica usando el modelo de diseño asincrónico de la interfaz IAsyncResult. Para obtener más información, consulte Introducción a la programación asincrónica.

Se aplica a