Поделиться через


WorkflowInvoker.EndInvoke(IAsyncResult) Метод

Определение

Возвращает результаты рабочего процесса, вызванного с помощью одного из перегруженных вариантов 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)

Параметры

result
IAsyncResult

Интерфейс IAsyncResult, ссылающийся на операцию BeginInvoke, которая запустила рабочий процесс.

Возвращаемое значение

Словарь значений OutArgument и InOutArgument корневого действия. Ключом этих значений является имя аргумента, представляющего выходные значения рабочего процесса.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll. Действие LongRunningDiceRoll имеет два выходных аргумента, представляющих результаты броска игральных костей. Они возвращаются путем вызова EndInvoke. После завершения вызова EndInvoke в словаре выходных данных возвращается каждый выходной аргумент с указанием имени.

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

Комментарии

Чтобы получить уведомление о завершении рабочего процесса и получить его выходные параметры, вызовите метод EndInvoke из метода callback, указанного в BeginInvoke. Если вызвать метод EndInvoke до завершения рабочего процесса, он будет заблокирован до завершения рабочего процесса.

Этот метод возвращает результат рабочего процесса, вызванного в асинхронном режиме с помощью асинхронного шаблона проектирования IAsyncResult. Дополнительные сведения см. в статье Обзор асинхронного программирования.

Применяется к