WorkflowInvoker.EndInvoke(IAsyncResult) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt die Ergebnisse eines Workflows zurück, der mit einer der BeginInvoke-Überladungen aufgerufen wurde.
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)
Parameter
- result
- IAsyncResult
Das IAsyncResult, das auf den BeginInvoke-Vorgang verweist, der den Workflow gestartet hat.
Gibt zurück
Ein Wörterbuch von OutArgument- und InOutArgument-Werten der Stammaktivität, nach Argumentnamen geordnet, das die Ausgaben des Workflows darstellt.
Beispiele
Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer LongRunningDiceRoll
-Aktivität besteht. Die LongRunningDiceRoll
-Aktivität verfügt über zwei Ausgabeargumente, die die Ergebnisse des Würfelvorgangs darstellen. Diese werden abgerufen, indem EndInvoke aufgerufen wird. Wenn der Aufruf von EndInvoke zurückgegeben wird, werden die einzelnen Ausgabeargumente nach Argumentname sortiert im Ausgabewörterbuch zurückgegeben.
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.");
}
Hinweise
Um benachrichtigt zu werden, wenn der Workflow abgeschlossen ist, und um die Ausgabeparameter des Workflows abzurufen, rufen Sie EndInvoke der callback
-Methode auf, angegeben von BeginInvoke. Wenn EndInvoke aufgerufen wird, bevor der Workflow abgeschlossen ist, erfolgt eine Sperre bis zum Abschluss des Workflows.
Diese Methode gibt die Ergebnisse eines Workflows zurück, der mithilfe des asynchronen IAsyncResult-Entwurfsmusters asynchron aufgerufen wurde. Weitere Informationen finden Sie unter Übersicht über die asynchrone Programmierung.