WorkflowInvoker.EndInvoke(IAsyncResult) Metod

Definition

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.

Gäller för