WorkflowInvoker.EndInvoke(IAsyncResult) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Retourneert de resultaten van een werkstroom die is aangeroepen met behulp van een van de BeginInvoke overbelastingen.
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)
Parameters
- result
- IAsyncResult
De IAsyncResult bewerking verwijst naar de BeginInvoke bewerking die de werkstroom heeft gestart.
Retouren
Een woordenlijst van de hoofdactiviteit OutArgument en InOutArgument waarden die zijn gekoppeld aan de argumentnaam die de uitvoer van de werkstroom vertegenwoordigt.
Voorbeelden
In het volgende voorbeeld wordt een werkstroom aangeroepen die bestaat uit een LongRunningDiceRoll activiteit. De LongRunningDiceRoll activiteit heeft twee uitvoerargumenten die de resultaten van de dobbelsteendraaibewerking vertegenwoordigen. Deze worden opgehaald door aan te roepen EndInvoke. Wanneer de aanroep die moet EndInvoke worden geretourneerd, wordt elk uitvoerargument geretourneerd in de uitvoerwoordenlijst, gesleuteld op argumentnaam.
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.");
}
Opmerkingen
Als u een melding wilt ontvangen wanneer de werkstroom is voltooid en de uitvoerparameters van de werkstroom ophaalt, roept EndInvoke u de callback methode aan die is opgegeven door BeginInvoke. Als EndInvoke de werkstroom wordt aangeroepen voordat de werkstroom is voltooid, wordt deze geblokkeerd totdat de werkstroom is voltooid.
Deze methode retourneert het resultaat van een werkstroom die asynchroon wordt aangeroepen met behulp van het IAsyncResult asynchrone ontwerppatroon. Zie Overzicht van Asynchroon programmeren voor meer informatie.