WorkflowInvoker.EndInvoke(IAsyncResult) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí výsledky pracovního postupu, který byl vyvolán pomocí jednoho z BeginInvoke přetížení.
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)
Parametry
- result
- IAsyncResult
Odkazuje IAsyncResult na BeginInvoke operaci, která spustila pracovní postup.
Návraty
Slovník hodnot a InOutArgument kořenové aktivity OutArgument s klíči podle názvu argumentu, které představují výstupy pracovního postupu.
Příklady
Následující příklad vyvolá pracovní postup, který se skládá z LongRunningDiceRoll
aktivity. Aktivita LongRunningDiceRoll
má dva výstupní argumenty, které představují výsledky operace hodu kostkou. Tyto hodnoty se načítají voláním EndInvokemetody . Když se volání vrátí EndInvoke , každý výstupní argument se vrátí ve slovníku outputs s klíči podle názvu argumentu.
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.");
}
Poznámky
Chcete-li být upozorněni na dokončení pracovního postupu a načtení výstupních parametrů pracovního postupu, volejte EndInvoke metodu callback
určenou v BeginInvoke. Pokud EndInvoke je volána před dokončením pracovního postupu, blokuje se, dokud se pracovní postup neskončí.
Tato metoda vrátí výsledek pracovního postupu vyvolaného asynchronně pomocí vzoru asynchronního návrhu IAsyncResult . Další informace najdete v tématu Přehled asynchronního programování.