다음을 통해 공유


WorkflowInvoker.BeginInvoke 메서드

정의

IAsyncResult 비동기 디자인 패턴을 사용하여 워크플로를 비동기적으로 호출합니다.

오버로드

BeginInvoke(AsyncCallback, Object)

지정한 AsyncCallback 및 사용자가 제공한 상태를 사용하여 워크플로를 비동기적으로 호출합니다.

BeginInvoke(IDictionary<String,Object>, AsyncCallback, Object)

입력 매개 변수의 지정한 IDictionary<TKey,TValue>, AsyncCallback 및 사용자가 제공한 상태를 사용하여 워크플로를 비동기적으로 호출합니다.

BeginInvoke(TimeSpan, AsyncCallback, Object)

지정한 시간 제한 간격, AsyncCallback 및 사용자가 제공한 상태를 사용하여 워크플로를 비동기적으로 호출합니다.

BeginInvoke(IDictionary<String,Object>, TimeSpan, AsyncCallback, Object)

입력 매개 변수의 지정한 IDictionary<TKey,TValue>, 시간 제한 간격, AsyncCallback 및 사용자가 제공한 상태를 사용하여 워크플로를 비동기적으로 호출합니다.

설명

자세한 내용은 비동기 프로그래밍 개요합니다.

BeginInvoke(AsyncCallback, Object)

지정한 AsyncCallback 및 사용자가 제공한 상태를 사용하여 워크플로를 비동기적으로 호출합니다.

public:
 IAsyncResult ^ BeginInvoke(AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginInvoke (AsyncCallback callback, object state);
member this.BeginInvoke : AsyncCallback * obj -> IAsyncResult
Public Function BeginInvoke (callback As AsyncCallback, state As Object) As IAsyncResult

매개 변수

callback
AsyncCallback

워크플로가 완료될 때 호출될 메서드입니다.

state
Object

비동기 작업에 대한 정보를 포함하는 애플리케이션별 선택적 개체입니다.

반환

비동기 호출 작업에 대한 참조입니다.

예제

다음 예제에서는 하나의 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를 호출합니다. 워크플로가 완료되기 전에 EndInvoke를 호출하면 워크플로가 완료될 때까지 차단됩니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 BeginInvoke을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

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

적용 대상

BeginInvoke(IDictionary<String,Object>, AsyncCallback, Object)

입력 매개 변수의 지정한 IDictionary<TKey,TValue>, AsyncCallback 및 사용자가 제공한 상태를 사용하여 워크플로를 비동기적으로 호출합니다.

public:
 IAsyncResult ^ BeginInvoke(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginInvoke (System.Collections.Generic.IDictionary<string,object> inputs, AsyncCallback callback, object state);
member this.BeginInvoke : System.Collections.Generic.IDictionary<string, obj> * AsyncCallback * obj -> IAsyncResult
Public Function BeginInvoke (inputs As IDictionary(Of String, Object), callback As AsyncCallback, state As Object) As IAsyncResult

매개 변수

inputs
IDictionary<String,Object>

인수 이름으로 키가 지정된 워크플로에 대한 입력 매개 변수의 사전입니다.

callback
AsyncCallback

워크플로가 완료될 때 호출될 메서드입니다.

state
Object

비동기 작업에 대한 정보를 포함하는 애플리케이션별 선택적 개체입니다.

반환

비동기 호출 작업에 대한 참조입니다.

예제

다음 예제에서는 하나의 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를 호출합니다. 워크플로가 완료되기 전에 EndInvoke를 호출하면 워크플로가 완료될 때까지 차단됩니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 BeginInvoke을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

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

적용 대상

BeginInvoke(TimeSpan, AsyncCallback, Object)

지정한 시간 제한 간격, AsyncCallback 및 사용자가 제공한 상태를 사용하여 워크플로를 비동기적으로 호출합니다.

public:
 IAsyncResult ^ BeginInvoke(TimeSpan timeout, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginInvoke (TimeSpan timeout, AsyncCallback callback, object state);
member this.BeginInvoke : TimeSpan * AsyncCallback * obj -> IAsyncResult
Public Function BeginInvoke (timeout As TimeSpan, callback As AsyncCallback, state As Object) As IAsyncResult

매개 변수

timeout
TimeSpan

워크플로가 중단되고 TimeoutException이 throw되기 전에 워크플로를 완료해야 하는 간격입니다.

callback
AsyncCallback

워크플로가 완료될 때 호출될 메서드입니다.

state
Object

비동기 작업에 대한 정보를 포함하는 애플리케이션별 선택적 개체입니다.

반환

비동기 호출 작업에 대한 참조입니다.

예제

다음 예제에서는 하나의 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를 호출합니다. 워크플로가 완료되기 전에 EndInvoke를 호출하면 워크플로가 완료될 때까지 차단됩니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 TimeoutException 메서드 호출 시 워크플로가 중단되고 EndInvoke이 throw됩니다.

참고

TimeoutException은 시간 제한 간격이 경과하고 실행 시 워크플로가 유휴 상태가 되는 경우에만 throw됩니다. 완료하는 데 지정한 시간 제한 간격보다 오래 걸리는 워크플로는 해당 워크플로가 유효 상태가 되지 않는 경우에 성공적으로 완료됩니다.

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

적용 대상

BeginInvoke(IDictionary<String,Object>, TimeSpan, AsyncCallback, Object)

입력 매개 변수의 지정한 IDictionary<TKey,TValue>, 시간 제한 간격, AsyncCallback 및 사용자가 제공한 상태를 사용하여 워크플로를 비동기적으로 호출합니다.

public:
 IAsyncResult ^ BeginInvoke(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginInvoke (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout, AsyncCallback callback, object state);
member this.BeginInvoke : System.Collections.Generic.IDictionary<string, obj> * TimeSpan * AsyncCallback * obj -> IAsyncResult
Public Function BeginInvoke (inputs As IDictionary(Of String, Object), timeout As TimeSpan, callback As AsyncCallback, state As Object) As IAsyncResult

매개 변수

inputs
IDictionary<String,Object>

인수 이름으로 키가 지정된 워크플로에 대한 입력 매개 변수의 사전입니다.

timeout
TimeSpan

워크플로가 중단되고 TimeoutException이 throw되기 전에 워크플로를 완료해야 하는 간격입니다.

callback
AsyncCallback

워크플로가 완료될 때 호출될 메서드입니다.

state
Object

비동기 작업에 대한 정보를 포함하는 애플리케이션별 선택적 개체입니다.

반환

비동기 호출 작업에 대한 참조입니다.

예제

다음 예제에서는 하나의 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를 호출합니다. 워크플로가 완료되기 전에 EndInvoke를 호출하면 워크플로가 완료될 때까지 차단됩니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 TimeoutException 호출 시 워크플로가 중단되고 EndInvoke이 throw됩니다.

참고

TimeoutException은 시간 제한 간격이 경과하고 실행 시 워크플로가 유휴 상태가 되는 경우에만 throw됩니다. 완료하는 데 지정한 시간 제한 간격보다 오래 걸리는 워크플로는 해당 워크플로가 유효 상태가 되지 않는 경우에 성공적으로 완료됩니다.

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

적용 대상