Share via


WorkflowInvoker.InvokeAsync 메서드

정의

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

오버로드

InvokeAsync(TimeSpan, Object)

지정한 시간 제한 간격 및 고유 식별자를 사용하여 워크플로를 비동기적으로 호출합니다.

InvokeAsync(IDictionary<String,Object>, TimeSpan)

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

InvokeAsync(IDictionary<String,Object>, Object)

입력 매개 변수의 지정한 IDictionary<TKey,TValue> 및 고유 식별자를 사용하여 워크플로를 비동기적으로 호출합니다.

InvokeAsync()

워크플로를 비동기적으로 호출합니다.

InvokeAsync(Object)

지정한 고유 식별자를 사용하여 워크플로를 비동기적으로 호출합니다.

InvokeAsync(IDictionary<String,Object>)

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

InvokeAsync(IDictionary<String,Object>, TimeSpan, Object)

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

InvokeAsync(TimeSpan)

지정한 시간 제한 간격을 사용하여 워크플로를 비동기적으로 호출합니다.

설명

워크플로가 완료될 때 알림을 받으려면 InvokeCompleted를 처리합니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 InvokeAsync을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

이 메서드는 이벤트 기반 비동기 디자인 패턴을 사용하여 워크플로를 비동기적으로 호출합니다. 자세한 내용은 이벤트 기반 비동기 패턴 개요를 참조하세요.

InvokeAsync(TimeSpan, Object)

지정한 시간 제한 간격 및 고유 식별자를 사용하여 워크플로를 비동기적으로 호출합니다.

public:
 void InvokeAsync(TimeSpan timeout, System::Object ^ userState);
public void InvokeAsync (TimeSpan timeout, object userState);
member this.InvokeAsync : TimeSpan * obj -> unit
Public Sub InvokeAsync (timeout As TimeSpan, userState As Object)

매개 변수

timeout
TimeSpan

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

userState
Object

이 특정 비동기 호출 작업을 다른 현재 비동기 호출 작업과 구별하는 데 사용되는 사용자 제공 개체입니다.

예제

다음 예제에서는 하나의 LongRunningDiceRoll 활동으로 구성된 워크플로를 호출합니다. LongRunningDiceRoll 활동에는 주사위 굴리기 작업의 결과를 나타내는 두 개의 출력 인수가 있습니다. 워크플로가 완료되면 InvokeCompleted 처리기에서 이러한 인수가 검색됩니다.

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))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

설명

userState 매개 변수는 현재 작업에 대해 현재 실행 중인 모든 InvokeAsync 작업에서 고유해야 합니다. userState가 고유하지 않으면 ArgumentException이 throw됩니다. userState를 사용하여 InvokeCompleted에서 워크플로를 식별하고 CancelAsync를 통해 워크플로를 취소할 수 있습니다.

워크플로가 완료될 때 알림을 받으려면 InvokeCompleted를 처리합니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 워크플로가 중단되고 TimeoutException이 throw됩니다.

참고

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

이 메서드는 이벤트 기반 비동기 디자인 패턴을 사용하여 워크플로를 비동기적으로 호출합니다. 자세한 내용은 이벤트 기반 비동기 패턴 개요를 참조하세요.

적용 대상

InvokeAsync(IDictionary<String,Object>, TimeSpan)

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

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), timeout As TimeSpan)

매개 변수

inputs
IDictionary<String,Object>

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

timeout
TimeSpan

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

예제

다음 예제에서는 하나의 LongRunningDiceRoll 활동으로 구성된 워크플로를 호출합니다. LongRunningDiceRoll 활동에는 주사위 굴리기 작업의 결과를 나타내는 두 개의 출력 인수가 있습니다. 워크플로가 완료되면 InvokeCompleted 처리기에서 이러한 인수가 검색됩니다.

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))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

설명

워크플로가 완료될 때 알림을 받으려면 InvokeCompleted를 처리합니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 워크플로가 중단되고 TimeoutException이 throw됩니다.

참고

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

이 메서드는 이벤트 기반 비동기 디자인 패턴을 사용하여 워크플로를 비동기적으로 호출합니다. 자세한 내용은 이벤트 기반 비동기 패턴 개요를 참조하세요.

이 메서드는 메서드의 동기 대응에서 throw할 수 있는 모든 비사용 예외를 반환하는 태스크에 저장됩니다. 예외가 반환된 작업에 저장되면 작업이 대기될 때 해당 예외가 throw됩니다. 와 같은 ArgumentException사용 예외는 여전히 동기적으로 throw됩니다. 저장된 예외는 에서 throw Invoke(IDictionary<String,Object>, TimeSpan)된 예외를 참조하세요.

적용 대상

InvokeAsync(IDictionary<String,Object>, Object)

입력 매개 변수의 지정한 IDictionary<TKey,TValue> 및 고유 식별자를 사용하여 워크플로를 비동기적으로 호출합니다.

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, System::Object ^ userState);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, object userState);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * obj -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), userState As Object)

매개 변수

inputs
IDictionary<String,Object>

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

userState
Object

이 특정 비동기 호출 작업을 다른 현재 비동기 호출 작업과 구별하는 데 사용되는 사용자 제공 개체입니다.

예제

다음 예제에서는 하나의 LongRunningDiceRoll 활동으로 구성된 워크플로를 호출합니다. LongRunningDiceRoll 활동에는 주사위 굴리기 작업의 결과를 나타내는 두 개의 출력 인수가 있습니다. 워크플로가 완료되면 InvokeCompleted 처리기에서 이러한 인수가 검색됩니다.

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))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

설명

userState 매개 변수는 현재 작업에 대해 현재 실행 중인 모든 InvokeAsync 작업에서 고유해야 합니다. userState가 고유하지 않으면 ArgumentException이 throw됩니다. userState를 사용하여 InvokeCompleted에서 워크플로를 식별하고 CancelAsync를 통해 워크플로를 취소할 수 있습니다.

워크플로가 완료될 때 알림을 받으려면 InvokeCompleted를 처리합니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 InvokeAsync을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

이 메서드는 이벤트 기반 비동기 디자인 패턴을 사용하여 워크플로를 비동기적으로 호출합니다. 자세한 내용은 이벤트 기반 비동기 패턴 개요를 참조하세요.

적용 대상

InvokeAsync()

워크플로를 비동기적으로 호출합니다.

public:
 void InvokeAsync();
public void InvokeAsync ();
member this.InvokeAsync : unit -> unit
Public Sub InvokeAsync ()

예제

다음 예제에서는 하나의 LongRunningDiceRoll 활동으로 구성된 워크플로를 호출합니다. LongRunningDiceRoll 활동에는 주사위 굴리기 작업의 결과를 나타내는 두 개의 출력 인수가 있습니다. 워크플로가 완료되면 InvokeCompleted 처리기에서 이러한 인수가 검색됩니다.

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))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

설명

워크플로가 완료될 때 알림을 받으려면 InvokeCompleted를 처리합니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 InvokeAsync을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

이 메서드는 이벤트 기반 비동기 디자인 패턴을 사용하여 워크플로를 비동기적으로 호출합니다. 자세한 내용은 이벤트 기반 비동기 패턴 개요를 참조하세요.

이 메서드는 메서드의 동기 대응에서 throw할 수 있는 모든 비사용 예외를 반환하는 태스크에 저장됩니다. 예외가 반환된 작업에 저장되면 작업이 대기될 때 해당 예외가 throw됩니다. 와 같은 ArgumentException사용 예외는 여전히 동기적으로 throw됩니다. 저장된 예외는 에서 throw Invoke()된 예외를 참조하세요.

적용 대상

InvokeAsync(Object)

지정한 고유 식별자를 사용하여 워크플로를 비동기적으로 호출합니다.

public:
 void InvokeAsync(System::Object ^ userState);
public void InvokeAsync (object userState);
member this.InvokeAsync : obj -> unit
Public Sub InvokeAsync (userState As Object)

매개 변수

userState
Object

이 특정 비동기 호출 작업을 다른 현재 비동기 호출 작업과 구별하는 데 사용되는 사용자 제공 개체입니다.

예제

다음 예제에서는 하나의 LongRunningDiceRoll 활동으로 구성된 워크플로를 호출합니다. LongRunningDiceRoll 활동에는 주사위 굴리기 작업의 결과를 나타내는 두 개의 출력 인수가 있습니다. 워크플로가 완료되면 InvokeCompleted 처리기에서 이러한 인수가 검색됩니다.

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))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

설명

userState 매개 변수는 현재 작업에 대해 현재 실행 중인 모든 InvokeAsync 작업에서 고유해야 합니다. userState 매개 변수가 고유하지 않으면 ArgumentException이 throw됩니다. userState를 사용하여 InvokeCompleted에서 워크플로를 식별하고 CancelAsync를 통해 워크플로를 취소할 수 있습니다.

워크플로가 완료될 때 알림을 받으려면 InvokeCompleted를 처리합니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 InvokeAsync을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

이 메서드는 이벤트 기반 비동기 디자인 패턴을 사용하여 워크플로를 비동기적으로 호출합니다. 자세한 내용은 이벤트 기반 비동기 패턴 개요를 참조하세요.

적용 대상

InvokeAsync(IDictionary<String,Object>)

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

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object))

매개 변수

inputs
IDictionary<String,Object>

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

예제

다음 예제에서는 하나의 LongRunningDiceRoll 활동으로 구성된 워크플로를 호출합니다. LongRunningDiceRoll 활동에는 주사위 굴리기 작업의 결과를 나타내는 두 개의 출력 인수가 있습니다. 워크플로가 완료되면 InvokeCompleted 처리기에서 이러한 인수가 검색됩니다.

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))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

설명

워크플로가 완료될 때 알림을 받으려면 InvokeCompleted를 처리합니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 InvokeAsync을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

이 메서드는 이벤트 기반 비동기 디자인 패턴을 사용하여 워크플로를 비동기적으로 호출합니다. 자세한 내용은 이벤트 기반 비동기 패턴 개요를 참조하세요.

이 메서드는 메서드의 동기 대응에서 throw할 수 있는 모든 비사용 예외를 반환하는 태스크에 저장됩니다. 예외가 반환된 작업에 저장되면 작업이 대기될 때 해당 예외가 throw됩니다. 와 같은 ArgumentException사용 예외는 여전히 동기적으로 throw됩니다. 저장된 예외는 에서 throw Invoke(IDictionary<String,Object>)된 예외를 참조하세요.

적용 대상

InvokeAsync(IDictionary<String,Object>, TimeSpan, Object)

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

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout, System::Object ^ userState);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout, object userState);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * TimeSpan * obj -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), timeout As TimeSpan, userState As Object)

매개 변수

inputs
IDictionary<String,Object>

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

timeout
TimeSpan

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

userState
Object

이 특정 비동기 호출 작업을 다른 현재 비동기 호출 작업과 구별하는 데 사용되는 사용자 제공 개체입니다.

예제

다음 예제에서는 하나의 LongRunningDiceRoll 활동으로 구성된 워크플로를 호출합니다. LongRunningDiceRoll 활동에는 주사위 굴리기 작업의 결과를 나타내는 두 개의 출력 인수가 있습니다. 워크플로가 완료되면 InvokeCompleted 처리기에서 이러한 인수가 검색됩니다.

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))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

설명

userState 매개 변수는 현재 작업에 대해 현재 실행 중인 모든 InvokeAsync 작업에서 고유해야 합니다. userState가 고유하지 않으면 ArgumentException이 throw됩니다. userState를 사용하여 InvokeCompleted에서 워크플로를 식별하고 CancelAsync를 통해 워크플로를 취소할 수 있습니다.

워크플로가 완료될 때 알림을 받으려면 InvokeCompleted를 처리합니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 워크플로가 중단되고 TimeoutException이 throw됩니다.

참고

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

이 메서드는 이벤트 기반 비동기 디자인 패턴을 사용하여 워크플로를 비동기적으로 호출합니다. 자세한 내용은 이벤트 기반 비동기 패턴 개요를 참조하세요.

적용 대상

InvokeAsync(TimeSpan)

지정한 시간 제한 간격을 사용하여 워크플로를 비동기적으로 호출합니다.

public:
 void InvokeAsync(TimeSpan timeout);
public void InvokeAsync (TimeSpan timeout);
member this.InvokeAsync : TimeSpan -> unit
Public Sub InvokeAsync (timeout As TimeSpan)

매개 변수

timeout
TimeSpan

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

예제

다음 예제에서는 하나의 LongRunningDiceRoll 활동으로 구성된 워크플로를 호출합니다. LongRunningDiceRoll 활동에는 주사위 굴리기 작업의 결과를 나타내는 두 개의 출력 인수가 있습니다. 워크플로가 완료되면 InvokeCompleted 처리기에서 이러한 인수가 검색됩니다.

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))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

설명

워크플로가 완료될 때 알림을 받으려면 InvokeCompleted를 처리합니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 워크플로가 중단되고 TimeoutException이 throw됩니다.

참고

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

이 메서드는 이벤트 기반 비동기 디자인 패턴을 사용하여 워크플로를 비동기적으로 호출합니다. 자세한 내용은 이벤트 기반 비동기 패턴 개요를 참조하세요.

이 메서드는 메서드의 동기 대응에서 throw할 수 있는 모든 비사용 예외를 반환하는 작업에 저장됩니다. 예외가 반환된 작업에 저장되면 작업이 대기될 때 해당 예외가 throw됩니다. 와 같은 ArgumentException사용 예외는 여전히 동기적으로 throw됩니다. 저장된 예외는 에서 throw Invoke(TimeSpan)된 예외를 참조하세요.

적용 대상