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. Дополнительные сведения см. в статье Обзор асинхронного программирования.