다음을 통해 공유


WorkflowInvoker.EndInvoke(IAsyncResult) 메서드

정의

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)

매개 변수

result
IAsyncResult

워크플로를 시작한 IAsyncResult 작업을 참조하는 BeginInvoke입니다.

반환

워크플로 출력을 나타내며 인수 이름으로 키가 지정된 루트 활동의 OutArgumentInOutArgument 값의 사전입니다.

예제

다음 예제에서는 하나의 LongRunningDiceRoll 활동으로 구성된 워크플로를 호출합니다. LongRunningDiceRoll 활동에는 주사위 굴리기 작업의 결과를 나타내는 두 개의 출력 인수가 있습니다. 이러한 인수는 EndInvoke를 호출하여 검색됩니다. EndInvoke에 대한 호출이 반환되면 인수 이름으로 키가 지정된 각 출력 인수가 출력 사전에 반환됩니다.

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

설명

워크플로가 완료될 때 알림을 받고 워크플로의 출력 매개 변수를 검색하려면 EndInvoke에 의해 지정된 callback 메서드에서 BeginInvoke를 호출합니다. 워크플로가 완료되기 전에 EndInvoke를 호출하면 워크플로가 완료될 때까지 차단됩니다.

이 메서드는 IAsyncResult 비동기 디자인 패턴을 사용하여 비동기적으로 호출된 워크플로의 결과를 반환합니다. 자세한 내용은 비동기 프로그래밍 개요합니다.

적용 대상