WorkflowInvoker.EndInvoke(IAsyncResult) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Returnerar resultatet av ett arbetsflöde som anropades med hjälp av en av överlagringarna 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)
Parametrar
- result
- IAsyncResult
Det IAsyncResult som refererar till åtgärden BeginInvoke som startade arbetsflödet.
Returer
En ordlista över rotaktivitetens OutArgument och InOutArgument värden som är nyckelade efter argumentnamn som representerar arbetsflödets utdata.
Exempel
I följande exempel anropas ett arbetsflöde som består av en LongRunningDiceRoll aktivitet. Aktiviteten LongRunningDiceRoll har två utdataargument som representerar resultatet av tärningskaståtgärden. Dessa hämtas genom att anropa EndInvoke. När anropet till EndInvoke returneras returneras varje utdataargument i utdataordlistan, med argumentets namn.
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.");
}
Kommentarer
Om du vill få ett meddelande när arbetsflödet är klart och hämta utdataparametrarna för arbetsflödet anropar EndInvoke du från den callback metod som anges av BeginInvoke. Om EndInvoke anropas innan arbetsflödet har slutförts blockeras det tills arbetsflödet har slutförts.
Den här metoden returnerar resultatet av ett arbetsflöde som anropas asynkront med hjälp av det IAsyncResult asynkrona designmönstret. Mer information finns i Asynkron programmeringsöversikt.