WorkflowInvoker.EndInvoke(IAsyncResult) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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).