Freigeben über


WorkflowInvoker.EndInvoke(IAsyncResult) Methode

Definition

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.

Gilt für: