다음을 통해 공유


WorkflowInvoker.Invoke 메서드

정의

워크플로를 동기적으로 호출하고, 워크플로 출력을 나타내며 인수 이름으로 키가 지정된 루트 활동의 OutArgumentInOutArgument 값의 사전을 반환합니다.

오버로드

Invoke(Activity, IDictionary<String,Object>, TimeSpan)

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

Invoke(Activity, TimeSpan)

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

Invoke(Activity, IDictionary<String,Object>)

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

Invoke(IDictionary<String,Object>, TimeSpan)

입력 매개 변수의 지정한 WorkflowInvoker(Activity) 및 지정한 시간 제한 간격을 사용하여 IDictionary<TKey,TValue> 생성자로 전달된 활동을 동기적으로 호출합니다.

Invoke(IDictionary<String,Object>)

입력 매개 변수의 지정한 WorkflowInvoker(Activity)를 사용하여 IDictionary<TKey,TValue> 생성자로 전달된 활동을 동기적으로 호출합니다.

Invoke(Activity)

지정한 워크플로 정의를 사용하여 워크플로를 동기적으로 호출합니다.

Invoke()

WorkflowInvoker(Activity) 생성자로 전달된 워크플로 정의를 사용하여 워크플로를 동기적으로 호출합니다.

Invoke(TimeSpan)

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

Invoke<TResult>(Activity<TResult>)

WorkflowInvoker(Activity) 생성자로 전달된 워크플로 정의를 사용하여 워크플로를 동기적으로 호출합니다.

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>)

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

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan)

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

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan)

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

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 Invoke을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

Invoke(Activity, IDictionary<String,Object>, TimeSpan)

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

public:
 static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
static member Invoke : System.Activities.Activity * System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity, inputs As IDictionary(Of String, Object), timeout As TimeSpan) As IDictionary(Of String, Object)

매개 변수

workflow
Activity

호출할 워크플로의 워크플로 정의입니다.

inputs
IDictionary<String,Object>

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

timeout
TimeSpan

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

반환

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

예제

다음 예제에서는 두 개의 WriteLine 활동과 Delay이 1분으로 구성된 하나의 Duration 활동을 포함하는 워크플로를 호출합니다. 이 워크플로는 두 번 호출됩니다. 즉, 처음에는 시간 제한 간격이 2분으로 호출되고, 두 번째에는 시간 제한 간격이 30초로 호출됩니다. 첫 번째 워크플로는 완료되지만 두 번째 워크플로는 그렇지 않으며 TimeoutException이 throw됩니다.

Activity wf = new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Before the 1 minute delay."
        },
        new Delay()
        {
            Duration = TimeSpan.FromMinutes(1)
        },
        new WriteLine()
        {
            Text = "After the 1 minute delay."
        }
    }
};

// This workflow completes successfully.
WorkflowInvoker.Invoke(wf, TimeSpan.FromMinutes(2));

// This workflow does not complete and a TimeoutException
// is thrown.
try
{
    WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
    Console.WriteLine(ex.Message);
}

사용 하는 예제에 대 한 Invoke 입력 및 출력 인수를 사용 하 여 오버 로드를 참조 하세요. Invoke 시간 제한 간격 없이이 오버 로드와 동일한 매개 변수를 사용 하 여 합니다.

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 워크플로가 중단되고 TimeoutException이 throw됩니다.

참고

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

적용 대상

Invoke(Activity, TimeSpan)

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

public:
 static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow, TimeSpan timeout);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, TimeSpan timeout);
static member Invoke : System.Activities.Activity * TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity, timeout As TimeSpan) As IDictionary(Of String, Object)

매개 변수

workflow
Activity

호출할 워크플로의 워크플로 정의입니다.

timeout
TimeSpan

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

반환

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

예제

다음 예제에서는 두 개의 WriteLine 활동과 Delay이 1분으로 구성된 하나의 Duration 활동을 포함하는 워크플로를 호출합니다. 이 워크플로는 두 번 호출됩니다. 즉, 처음에는 시간 제한 간격이 2분으로 호출되고, 두 번째에는 시간 제한 간격이 30초로 호출됩니다. 첫 번째 워크플로는 완료되지만 두 번째 워크플로는 그렇지 않으며 TimeoutException이 throw됩니다.

Activity wf = new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Before the 1 minute delay."
        },
        new Delay()
        {
            Duration = TimeSpan.FromMinutes(1)
        },
        new WriteLine()
        {
            Text = "After the 1 minute delay."
        }
    }
};

// This workflow completes successfully.
WorkflowInvoker.Invoke(wf, TimeSpan.FromMinutes(2));

// This workflow does not complete and a TimeoutException
// is thrown.
try
{
    WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
    Console.WriteLine(ex.Message);
}

사용 하는 예제에 대 한 Invoke 출력 인수를 사용 하 여 오버 로드를 참조 하세요. Invoke 시간 제한 간격 없이이 오버 로드와 동일한 매개 변수를 사용 하 여 합니다.

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 워크플로가 중단되고 TimeoutException이 throw됩니다.

참고

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

적용 대상

Invoke(Activity, IDictionary<String,Object>)

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

public:
 static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, System.Collections.Generic.IDictionary<string,object> inputs);
static member Invoke : System.Activities.Activity * System.Collections.Generic.IDictionary<string, obj> -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity, inputs As IDictionary(Of String, Object)) As IDictionary(Of String, Object)

매개 변수

workflow
Activity

호출할 워크플로의 워크플로 정의입니다.

inputs
IDictionary<String,Object>

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

반환

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

예제

다음 예제에서는 두 개의 입력 인수와 두 개의 출력 인수를 포함하는 단일 Divide 활동으로 구성된 워크플로를 호출합니다. 워크플로가 호출되면 각 입력 인수의 값이 인수 이름으로 키가 지정되어 포함된 arguments 사전이 전달됩니다. Invoke에 대한 호출이 반환되면 각 출력 인수가 outputs 사전에 반환됩니다. 이렇게 반환되는 인수에는 인수 이름이 키로 지정됩니다.

public sealed class Divide : CodeActivity
{
    [RequiredArgument]
    public InArgument<int> Dividend { get; set; }

    [RequiredArgument]
    public InArgument<int> Divisor { get; set; }

    public OutArgument<int> Remainder { get; set; }
    public OutArgument<int> Result { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
        int quotient = Dividend.Get(context) / Divisor.Get(context);
        int remainder = Dividend.Get(context) % Divisor.Get(context);

        Result.Set(context, quotient);
        Remainder.Set(context, remainder);
    }
}
int dividend = 500;
int divisor = 36;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);

IDictionary<string, object> outputs =
    WorkflowInvoker.Invoke(new Divide(), arguments);

Console.WriteLine("{0} / {1} = {2} Remainder {3}",
    dividend, divisor, outputs["Result"], outputs["Remainder"]);

워크플로에서 파생 되는 경우 ActivityWithResult와 같은 CodeActivity<TResult> 또는 Activity<TResult>, 및 잘 정의 된 것 외에도 출력 인수가 Result 출력 인수의 비 제네릭 오버 로드를 Invoke,이 예에 사용 해야 추가 인수를 검색 하는 순서입니다. 이렇게 하려면 Invoke로 전달된 워크플로 정의가 Activity 형식이어야 합니다. 이 예제는 Divide 에서 파생 되는 활동 CodeActivity<int>로 선언 됩니다 Activity 이 오버 로드 되도록 Invoke는 단일 반환 값 대신 인수 사전을 반환 하는 합니다.

public sealed class Divide : CodeActivity<int>
{
    public InArgument<int> Dividend { get; set; }
    public InArgument<int> Divisor { get; set; }
    public OutArgument<int> Remainder { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int quotient = Dividend.Get(context) / Divisor.Get(context);
        int remainder = Dividend.Get(context) % Divisor.Get(context);

        Remainder.Set(context, remainder);

        return quotient;
    }
}
int dividend = 500;
int divisor = 36;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);

Activity wf = new Divide();

IDictionary<string, object> outputs =
    WorkflowInvoker.Invoke(wf, arguments);

Console.WriteLine("{0} / {1} = {2} Remainder {3}",
    dividend, divisor, outputs["Result"], outputs["Remainder"]);

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 Invoke을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

적용 대상

Invoke(IDictionary<String,Object>, TimeSpan)

입력 매개 변수의 지정한 WorkflowInvoker(Activity) 및 지정한 시간 제한 간격을 사용하여 IDictionary<TKey,TValue> 생성자로 전달된 활동을 동기적으로 호출합니다.

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

매개 변수

inputs
IDictionary<String,Object>

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

timeout
TimeSpan

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

반환

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

예제

다음 예제에서는 두 개의 WriteLine 활동과 Delay이 1분으로 구성된 하나의 Duration 활동을 포함하는 워크플로를 호출합니다. 이 워크플로는 두 번 호출됩니다. 즉, 처음에는 시간 제한 간격이 2분으로 호출되고, 두 번째에는 시간 제한 간격이 30초로 호출됩니다. 첫 번째 워크플로는 완료되지만 두 번째 워크플로는 그렇지 않으며 TimeoutException이 throw되고 다음 메시지가 표시됩니다.

The operation did not complete within the allotted timeout of 00:00:30.   
The time allotted to this operation may have been a portion of a longer timeout.  
Activity wf = new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Before the 1 minute delay."
        },
        new Delay()
        {
            Duration = TimeSpan.FromMinutes(1)
        },
        new WriteLine()
        {
            Text = "After the 1 minute delay."
        }
    }
};

WorkflowInvoker invoker = new WorkflowInvoker(wf);

// This workflow completes successfully.
invoker.Invoke(TimeSpan.FromMinutes(2));

// This workflow does not complete and a TimeoutException
// is thrown.
try
{
    invoker.Invoke(TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
    Console.WriteLine(ex.Message);
}

사용 하는 예제에 대 한 Invoke 입력 및 출력 인수를 사용 하 여 오버 로드를 참조 하세요. Invoke 시간 제한 간격 없이이 오버 로드와 동일한 매개 변수를 사용 하 여 합니다.

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 워크플로가 중단되고 TimeoutException이 throw됩니다.

참고

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

적용 대상

Invoke(IDictionary<String,Object>)

입력 매개 변수의 지정한 WorkflowInvoker(Activity)를 사용하여 IDictionary<TKey,TValue> 생성자로 전달된 활동을 동기적으로 호출합니다.

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

매개 변수

inputs
IDictionary<String,Object>

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

반환

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

예제

다음 예제에서는 두 개의 입력 인수와 두 개의 출력 인수를 포함하는 단일 Divide 활동으로 구성된 워크플로를 호출합니다. 워크플로가 호출되면 각 입력 인수의 값이 인수 이름으로 키가 지정되어 포함된 arguments 사전이 전달됩니다. Invoke에 대한 호출이 반환되면 각 출력 인수가 outputs 사전에 반환됩니다. 이렇게 반환되는 인수에는 인수 이름이 키로 지정됩니다.

public sealed class Divide : CodeActivity
{
    [RequiredArgument]
    public InArgument<int> Dividend { get; set; }

    [RequiredArgument]
    public InArgument<int> Divisor { get; set; }

    public OutArgument<int> Remainder { get; set; }
    public OutArgument<int> Result { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
        int quotient = Dividend.Get(context) / Divisor.Get(context);
        int remainder = Dividend.Get(context) % Divisor.Get(context);

        Result.Set(context, quotient);
        Remainder.Set(context, remainder);
    }
}
int dividend = 500;
int divisor = 36;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);

WorkflowInvoker invoker = new WorkflowInvoker(new Divide());

IDictionary<string, object> outputs = invoker.Invoke(arguments);

Console.WriteLine("{0} / {1} = {2} Remainder {3}",
    dividend, divisor, outputs["Result"], outputs["Remainder"]);

워크플로에서 파생 되는 경우 ActivityWithResult와 같은 CodeActivity<TResult> 또는 Activity<TResult>, 및 잘 정의 된 것 외에도 출력 인수가 Result 출력 인수의 비 제네릭 오버 로드를 Invoke,이 예에 사용 해야 추가 인수를 검색 하는 순서입니다. 이렇게 하려면에 전달 된 워크플로 정의 WorkflowInvoker 생성자 형식 이어야 합니다 Activity합니다. 이 예제는 Divide 에서 파생 되는 활동 CodeActivity<int>로 선언 됩니다 Activity 이 오버 로드 되도록 Invoke는 단일 반환 값 대신 인수 사전을 반환 하는 합니다.

public sealed class Divide : CodeActivity<int>
{
    public InArgument<int> Dividend { get; set; }
    public InArgument<int> Divisor { get; set; }
    public OutArgument<int> Remainder { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int quotient = Dividend.Get(context) / Divisor.Get(context);
        int remainder = Dividend.Get(context) % Divisor.Get(context);

        Remainder.Set(context, remainder);

        return quotient;
    }
}
int dividend = 500;
int divisor = 36;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);

Activity wf = new Divide();

WorkflowInvoker invoker = new WorkflowInvoker(wf);

IDictionary<string, object> outputs = invoker.Invoke(arguments);

Console.WriteLine("{0} / {1} = {2} Remainder {3}",
    dividend, divisor, outputs["Result"], outputs["Remainder"]);

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 Invoke을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

적용 대상

Invoke(Activity)

지정한 워크플로 정의를 사용하여 워크플로를 동기적으로 호출합니다.

public:
 static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow);
static member Invoke : System.Activities.Activity -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity) As IDictionary(Of String, Object)

매개 변수

workflow
Activity

호출할 워크플로의 워크플로 정의입니다.

반환

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

예제

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

public sealed class DiceRoll : CodeActivity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    static Random r = new Random();

    protected override void Execute(CodeActivityContext context)
    {
        D1.Set(context, r.Next(1, 7));
        D2.Set(context, r.Next(1, 7));
    }
}
IDictionary<string, object> outputs =
    WorkflowInvoker.Invoke(new DiceRoll());

Console.WriteLine("The two dice are {0} and {1}.",
    outputs["D1"], outputs["D2"]);

워크플로의 루트 활동에 출력 인수가 없거나 호스트에 해당 활동이 필요하지 않은 경우 루트 활동을 무시할 수 있습니다. 다음 예제에서는 출력 인수를 포함하지 않는 단일 WriteLine 활동으로 구성된 워크플로를 호출합니다.

Activity wf = new WriteLine
{
    Text = "Hello World."
};

WorkflowInvoker.Invoke(wf);

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 Invoke을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

적용 대상

Invoke()

WorkflowInvoker(Activity) 생성자로 전달된 워크플로 정의를 사용하여 워크플로를 동기적으로 호출합니다.

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

반환

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

예제

다음 예제에서는 단일 DiceRoll 활동으로 구성된 워크플로를 호출합니다. DiceRoll 활동에는 주사위 굴리기 작업의 결과를 나타내는 두 개의 출력 인수가 있습니다. Invoke에 대한 호출이 반환되면 인수 이름으로 키가 지정된 각 출력 인수가 출력 사전에 반환됩니다. 워크플로 호출을 두 번에 전달 된 워크플로 정의 사용 하 여 WorkflowInvoker 생성자입니다.

public sealed class DiceRoll : CodeActivity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    static Random r = new Random();

    protected override void Execute(CodeActivityContext context)
    {
        D1.Set(context, r.Next(1, 7));
        D2.Set(context, r.Next(1, 7));
    }
}
WorkflowInvoker invoker = new WorkflowInvoker(new DiceRoll());

IDictionary<string, object> outputs =
    invoker.Invoke();

Console.WriteLine("The two dice are {0} and {1}.",
    outputs["D1"], outputs["D2"]);

outputs = invoker.Invoke();

Console.WriteLine("The next two dice are {0} and {1}.",
    outputs["D1"], outputs["D2"]);

워크플로의 루트 활동에 출력 인수가 없거나 호스트에 해당 활동이 필요하지 않은 경우 루트 활동을 무시할 수 있습니다. 다음 예제에서는 출력 인수를 포함하지 않는 단일 WriteLine 활동으로 구성된 워크플로를 호출합니다.

Activity wf = new WriteLine
{
    Text = "Hello World."
};

WorkflowInvoker invoker = new WorkflowInvoker(wf);

invoker.Invoke();

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 Invoke을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

적용 대상

Invoke(TimeSpan)

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

public:
 System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(TimeSpan timeout);
public System.Collections.Generic.IDictionary<string,object> Invoke (TimeSpan timeout);
member this.Invoke : TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Function Invoke (timeout As TimeSpan) As IDictionary(Of String, Object)

매개 변수

timeout
TimeSpan

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

반환

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

예제

다음 예제에서는 두 개의 WriteLine 활동과 Delay이 1분으로 구성된 하나의 Duration 활동을 포함하는 워크플로를 호출합니다. 이 워크플로는 두 번 호출됩니다. 즉, 처음에는 시간 제한 간격이 2분으로 호출되고, 두 번째에는 시간 제한 간격이 30초로 호출됩니다. 첫 번째 워크플로는 완료되지만 두 번째 워크플로는 그렇지 않으며 TimeoutException이 throw되고 다음 메시지가 표시됩니다.

The operation did not complete within the allotted timeout of 00:00:30.   
The time allotted to this operation may have been a portion of a longer timeout.  
Activity wf = new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Before the 1 minute delay."
        },
        new Delay()
        {
            Duration = TimeSpan.FromMinutes(1)
        },
        new WriteLine()
        {
            Text = "After the 1 minute delay."
        }
    }
};

WorkflowInvoker invoker = new WorkflowInvoker(wf);

// This workflow completes successfully.
invoker.Invoke(TimeSpan.FromMinutes(2));

// This workflow does not complete and a TimeoutException
// is thrown.
try
{
    invoker.Invoke(TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
    Console.WriteLine(ex.Message);
}

사용 하는 예제에 대 한 Invoke 출력 인수를 사용 하 여 오버 로드를 참조 하세요. Invoke 시간 제한 간격 없이이 오버 로드와 동일한 매개 변수를 사용 하 여 합니다.

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 워크플로가 중단되고 TimeoutException이 throw됩니다.

참고

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

적용 대상

Invoke<TResult>(Activity<TResult>)

WorkflowInvoker(Activity) 생성자로 전달된 워크플로 정의를 사용하여 워크플로를 동기적으로 호출합니다.

public:
generic <typename TResult>
 static TResult Invoke(System::Activities::Activity<TResult> ^ workflow);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow);
static member Invoke : System.Activities.Activity<'Result> -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult)) As TResult

형식 매개 변수

TResult

워크플로 형식입니다.

매개 변수

workflow
Activity<TResult>

호출할 워크플로의 워크플로 정의입니다. 워크플로 정의는 ActivityWithResult에서 파생해야 합니다.

반환

TResult

작업 실행 결과를 포함하는 TResult 형식의 값입니다.

예제

단일 구성 된 워크플로 호출 하는 다음 예제에서는 Add 두 개의 입력된 인수가 포함 된 활동에서 파생 되므로 및 CodeActivity<int> 잘 정의 된 있는 Result 출력 인수입니다. 워크플로가 호출되면 각 입력 인수의 값이 인수 이름으로 키가 지정되어 포함된 arguments 사전이 전달됩니다. 경우에 대 한 호출 Invoke 의 값을 반환 합니다 Result 출력 인수가 반환 됩니다.

public sealed class Add : CodeActivity<int>
{
    public InArgument<int> X { get; set; }
    public InArgument<int> Y { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int x = X.Get(context);
        int y = Y.Get(context);

        return x + y;
    }
}
int x = 1;
int y = 2;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);

Console.WriteLine("Invoking Add.");

int result = WorkflowInvoker.Invoke(new Add(), arguments);

Console.WriteLine("{0} + {1} = {2}", x, y, result);

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 Invoke을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

적용 대상

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>)

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

public:
generic <typename TResult>
 static TResult Invoke(System::Activities::Activity<TResult> ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs);
static member Invoke : System.Activities.Activity<'Result> * System.Collections.Generic.IDictionary<string, obj> -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult), inputs As IDictionary(Of String, Object)) As TResult

형식 매개 변수

TResult

워크플로 형식입니다.

매개 변수

workflow
Activity<TResult>

호출할 워크플로의 워크플로 정의입니다.

inputs
IDictionary<String,Object>

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

반환

TResult

작업 실행 결과를 포함하는 TResult 형식의 값입니다.

예제

단일 구성 된 워크플로 호출 하는 다음 예제에서는 Add 두 개의 입력된 인수가 포함 된 활동에서 파생 되므로 및 CodeActivity<int> 잘 정의 된 있는 Result 출력 인수입니다. 워크플로가 호출되면 각 입력 인수의 값이 인수 이름으로 키가 지정되어 포함된 arguments 사전이 전달됩니다. 경우에 대 한 호출 Invoke 의 값을 반환 합니다 Result 출력 인수가 반환 됩니다.

public sealed class Add : CodeActivity<int>
{
    public InArgument<int> X { get; set; }
    public InArgument<int> Y { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int x = X.Get(context);
        int y = Y.Get(context);

        return x + y;
    }
}
int x = 1;
int y = 2;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);

Console.WriteLine("Invoking Add.");

int result = WorkflowInvoker.Invoke(new Add(), arguments);

Console.WriteLine("{0} + {1} = {2}", x, y, result);

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 완료되어야 하는 시간 제한 간격을 구성하려면 Invoke을 사용하는 TimeSpan 오버로드 중 하나를 사용합니다.

참고

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

적용 대상

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan)

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

public:
generic <typename TResult>
 static TResult Invoke(System::Activities::Activity<TResult> ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
static member Invoke : System.Activities.Activity<'Result> * System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult), inputs As IDictionary(Of String, Object), timeout As TimeSpan) As TResult

형식 매개 변수

TResult

워크플로 형식입니다.

매개 변수

workflow
Activity<TResult>

호출할 워크플로의 워크플로 정의입니다.

inputs
IDictionary<String,Object>

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

timeout
TimeSpan

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

반환

TResult

작업 실행 결과를 포함하는 TResult 형식의 값입니다.

예제

단일 구성 된 워크플로 호출 하는 다음 예제에서는 Add 두 개의 입력된 인수가 포함 된 활동에서 파생 되므로 및 CodeActivity<int> 잘 정의 된 있는 Result 출력 인수입니다. 워크플로가 호출되면 각 입력 인수의 값이 인수 이름으로 키가 지정되어 포함된 arguments 사전이 전달됩니다. 경우에 대 한 호출 Invoke 의 값을 반환 합니다 Result 출력 인수가 반환 됩니다.

public sealed class Add : CodeActivity<int>
{
    public InArgument<int> X { get; set; }
    public InArgument<int> Y { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int x = X.Get(context);
        int y = Y.Get(context);

        return x + y;
    }
}
int x = 1;
int y = 2;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);

Console.WriteLine("Invoking Add.");

int result = WorkflowInvoker.Invoke(new Add(), arguments);

Console.WriteLine("{0} + {1} = {2}", x, y, result);

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 워크플로가 중단되고 TimeoutException이 throw됩니다.

참고

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

적용 대상

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan)

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

public:
generic <typename TResult>
 static TResult Invoke(System::Activities::Activity<TResult> ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, [Runtime::InteropServices::Out] System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ % additionalOutputs, TimeSpan timeout);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs, out System.Collections.Generic.IDictionary<string,object> additionalOutputs, TimeSpan timeout);
static member Invoke : System.Activities.Activity<'Result> * System.Collections.Generic.IDictionary<string, obj> * IDictionary * TimeSpan -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult), inputs As IDictionary(Of String, Object), ByRef additionalOutputs As IDictionary(Of String, Object), timeout As TimeSpan) As TResult

형식 매개 변수

TResult

워크플로 형식입니다.

매개 변수

workflow
Activity<TResult>

호출할 워크플로의 워크플로 정의입니다.

inputs
IDictionary<String,Object>

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

additionalOutputs
IDictionary<String,Object>

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

timeout
TimeSpan

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

반환

TResult

작업 실행 결과를 포함하는 TResult 형식의 값입니다.

예제

단일 구성 된 워크플로 호출 하는 다음 예제에서는 Add 두 개의 입력된 인수가 포함 된 활동에서 파생 되므로 및 CodeActivity<int> 잘 정의 된 있는 Result 출력 인수입니다. 워크플로가 호출되면 각 입력 인수의 값이 인수 이름으로 키가 지정되어 포함된 arguments 사전이 전달됩니다. 경우에 대 한 호출 Invoke 의 값을 반환 합니다 Result 출력 인수가 반환 됩니다.

public sealed class Add : CodeActivity<int>
{
    public InArgument<int> X { get; set; }
    public InArgument<int> Y { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int x = X.Get(context);
        int y = Y.Get(context);

        return x + y;
    }
}
int x = 1;
int y = 2;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);

Console.WriteLine("Invoking Add.");

int result = WorkflowInvoker.Invoke(new Add(), arguments);

Console.WriteLine("{0} + {1} = {2}", x, y, result);

설명

이 메서드는 유휴 시간을 포함하여 워크플로가 완료될 때까지 차단됩니다. 모든 워크플로 실행은 호출 스레드에서 실행됩니다. 워크플로가 지정한 시간 제한 간격 내에 완료되지 않으면 워크플로가 중단되고 TimeoutException이 throw됩니다.

참고

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

적용 대상