Udostępnij za pośrednictwem


WorkflowInvoker.EndInvoke(IAsyncResult) Metoda

Definicja

Zwraca wyniki przepływu pracy, który został wywołany przy użyciu jednego z BeginInvoke przeciążeń.

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)

Parametry

result
IAsyncResult

Element IAsyncResult odwołujący się do BeginInvoke operacji, która uruchomiła przepływ pracy.

Zwraca

Słownik wartości i InOutArgument działań OutArgument głównych kluczy według nazwy argumentu reprezentujące dane wyjściowe przepływu pracy.

Przykłady

Poniższy przykład wywołuje przepływ pracy składający się z LongRunningDiceRoll działania. Działanie LongRunningDiceRoll ma dwa argumenty wyjściowe reprezentujące wyniki operacji rzutowania kostką. Są one pobierane przez wywołanie metody EndInvoke. Gdy wywołanie funkcji EndInvoke zwraca, każdy argument wyjściowy jest zwracany w słowniku danych wyjściowych, kluczem według nazwy argumentu.

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.");
}

Uwagi

Aby zostać powiadomionym o zakończeniu przepływu pracy i pobraniu parametrów wyjściowych przepływu pracy, wywołaj EndInvoke metodę callback określoną przez BeginInvokemetodę . Jeśli EndInvoke jest wywoływana przed ukończeniem przepływu pracy, blokuje do czasu ukończenia przepływu pracy.

Ta metoda zwraca wynik przepływu pracy wywoływanego asynchronicznie przy użyciu IAsyncResult asynchronicznego wzorca projektowego. Aby uzyskać więcej informacji, zobacz Asynchronous Programming Overview (Omówienie programowania asynchronicznego).

Dotyczy