Aracılığıyla paylaş


WorkflowInvoker.EndInvoke(IAsyncResult) Yöntem

Tanım

Aşırı yüklemelerden biri kullanılarak çağrılan bir iş akışının BeginInvoke sonuçlarını döndürür.

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)

Parametreler

result
IAsyncResult

IAsyncResult İş akışını başlatan işleme başvuranBeginInvoke.

Döndürülenler

kök etkinliğinin OutArgument ve InOutArgument iş akışının çıkışlarını temsil eden bağımsız değişken adına göre anahtarlanan değerlerin sözlüğü.

Örnekler

Aşağıdaki örnek, bir etkinlik içeren bir LongRunningDiceRoll iş akışını çağırır. Etkinlik, LongRunningDiceRoll zar atma işleminin sonuçlarını temsil eden iki çıkış bağımsız değişkenine sahiptir. Bunlar çağrılarak EndInvokealınır. çağrısı EndInvoke döndürdüğünde, her çıkış bağımsız değişkeni, bağımsız değişken adıyla anahtarlanan çıkış sözlüğünde döndürülür.

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

Açıklamalar

İş akışı tamamlandığında bildirim almak ve iş akışının çıkış parametrelerini almak için tarafından BeginInvokebelirtilen yönteminden çağrısında EndInvoke bulununcallback. İş akışı tamamlanmadan önce çağrılırsa EndInvoke , iş akışı tamamlanana kadar engeller.

Bu yöntem, zaman uyumsuz tasarım deseni kullanılarak IAsyncResult zaman uyumsuz olarak çağrılan bir iş akışının sonucunu döndürür. Daha fazla bilgi için bkz. Zaman Uyumsuz Programlamaya Genel Bakış.

Şunlara uygulanır