WorkflowInvoker.Invoke メソッド

定義

ワークフローを同期的に呼び出し、ルート アクティビティの OutArgument のディクショナリと、ワークフローの出力を表す引数名でキー付けされた InOutArgument 値を返します。

オーバーロード

名前 説明
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 がスローされるまでにワークフローを完了する必要がある間隔。

返品

ルート アクティビティの OutArgument のディクショナリと、ワークフローの出力を表す引数名でキー付けされた InOutArgument 値。

次の例では、2 つのWriteLine アクティビティと、Delay 1 分で構成されたDuration アクティビティを含むワークフローを呼び出します。 このワークフローは 2 回呼び出されます。タイムアウト間隔が 2 分の 1 回目、タイムアウト間隔が 30 秒の 2 回目。 最初のワークフローは正常に完了しますが、2 番目のワークフローは完了せず、 TimeoutException がスローされます。

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 がスローされます。

Note

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 ワークフローがアイドル状態にならない場合、指定したタイムアウト間隔を超えて完了するまでに時間がかかるワークフローが正常に完了します。

適用対象

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 がスローされるまでにワークフローを完了する必要がある間隔。

返品

ルート アクティビティの OutArgument のディクショナリと、ワークフローの出力を表す引数名でキー付けされた InOutArgument 値。

次の例では、2 つのWriteLine アクティビティと、Delay 1 分で構成されたDuration アクティビティを含むワークフローを呼び出します。 このワークフローは 2 回呼び出されます。タイムアウト間隔が 2 分の 1 回目、タイムアウト間隔が 30 秒の 2 回目。 最初のワークフローは正常に完了しますが、2 番目のワークフローは完了せず、 TimeoutException がスローされます。

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 がスローされます。

Note

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 ワークフローがアイドル状態にならない場合、指定したタイムアウト間隔を超えて完了するまでに時間がかかるワークフローが正常に完了します。

適用対象

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>

引数名でキー指定されたワークフローへの入力パラメーターのディクショナリ。

返品

ルート アクティビティの OutArgument のディクショナリと、ワークフローの出力を表す引数名でキー付けされた InOutArgument 値。

次の例では、2 つの入力引数と 2 つの出力引数を持つ 1 つの 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"]);

ワークフローがActivityWithResultCodeActivity<TResult>などのActivity<TResult>から派生し、明確に定義されたResult出力引数に加えて出力引数がある場合は、追加の引数を取得するために、このようなInvokeの非ジェネリック オーバーロードを使用する必要があります。 これを行うには、 Invoke に渡されるワークフロー定義が Activity型である必要があります。 この例では、 Divide アクティビティは CodeActivity<int>から派生しますが、 Activity として宣言されているため、1 つの戻り値ではなく引数のディクショナリを返す 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 がスローされるまでにワークフローを完了する必要がある間隔。

返品

ルート アクティビティの OutArgument のディクショナリと、ワークフローの出力を表す引数名でキー付けされた InOutArgument 値。

次の例では、2 つのWriteLine アクティビティと、Delay 1 分で構成されたDuration アクティビティを含むワークフローを呼び出します。 このワークフローは 2 回呼び出されます。タイムアウト間隔が 2 分の 1 回目、タイムアウト間隔が 30 秒の 2 回目。 最初のワークフローは正常に完了しますが、2 番目のワークフローは正常に完了せず、 TimeoutException がスローされ、次のメッセージが表示されます。

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 がスローされます。

Note

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 ワークフローがアイドル状態にならない場合、指定したタイムアウト間隔を超えて完了するまでに時間がかかるワークフローが正常に完了します。

適用対象

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>

引数名でキー指定されたワークフローへの入力パラメーターのディクショナリ。

返品

ルート アクティビティの OutArgument のディクショナリと、ワークフローの出力を表す引数名でキー付けされた InOutArgument 値。

次の例では、2 つの入力引数と 2 つの出力引数を持つ 1 つの 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"]);

ワークフローがActivityWithResultCodeActivity<TResult>などのActivity<TResult>から派生し、明確に定義されたResult出力引数に加えて出力引数がある場合は、追加の引数を取得するために、このようなInvokeの非ジェネリック オーバーロードを使用する必要があります。 これを行うには、 WorkflowInvoker コンストラクターに渡されるワークフロー定義が Activity型である必要があります。 この例では、 Divide アクティビティは CodeActivity<int>から派生しますが、 Activity として宣言されているため、1 つの戻り値ではなく引数のディクショナリを返す 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

呼び出すワークフローのワークフロー定義。

返品

ルート アクティビティの OutArgument のディクショナリと、ワークフローの出力を表す引数名でキー付けされた InOutArgument 値。

次の例では、1 つの DiceRoll アクティビティで構成されるワークフローを呼び出します。 DiceRoll アクティビティには、サイコロ ロール操作の結果を表す 2 つの出力引数があります。 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"]);

ワークフローのルート アクティビティに出力引数がない場合、またはホストで必要でない場合は無視できます。 次の例では、出力引数を持たない 1 つの 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)

返品

ルート アクティビティの OutArgument のディクショナリと、ワークフローの出力を表す引数名でキー付けされた InOutArgument 値。

次の例では、1 つの DiceRoll アクティビティで構成されるワークフローを呼び出します。 DiceRoll アクティビティには、サイコロ ロール操作の結果を表す 2 つの出力引数があります。 Invokeの呼び出しが返されると、各出力引数が出力ディクショナリで返され、引数名でキーが設定されます。 ワークフローは、 WorkflowInvoker コンストラクターに渡されたワークフロー定義を使用して 2 回呼び出されます。

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"]);

ワークフローのルート アクティビティに出力引数がない場合、またはホストで必要でない場合は無視できます。 次の例では、出力引数を持たない 1 つの 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 がスローされるまでにワークフローを完了する必要がある間隔。

返品

ルート アクティビティの OutArgument のディクショナリと、ワークフローの出力を表す引数名でキー付けされた InOutArgument 値。

次の例では、2 つのWriteLine アクティビティと、Delay 1 分で構成されたDuration アクティビティを含むワークフローを呼び出します。 このワークフローは 2 回呼び出されます。タイムアウト間隔が 2 分の 1 回目、タイムアウト間隔が 30 秒の 2 回目。 最初のワークフローは正常に完了しますが、2 番目のワークフローは正常に完了せず、 TimeoutException がスローされ、次のメッセージが表示されます。

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 がスローされます。

Note

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 ワークフローがアイドル状態にならない場合、指定したタイムアウト間隔を超えて完了するまでに時間がかかるワークフローが正常に完了します。

適用対象

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 型の値。

次の例では、2 つの入力引数を持つ 1 つの Add アクティビティで構成されるワークフローを呼び出します。これは、 CodeActivity<int> から派生しているため、1 つの明確に定義された 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 型の値。

次の例では、2 つの入力引数を持つ 1 つの Add アクティビティで構成されるワークフローを呼び出します。これは、 CodeActivity<int> から派生しているため、1 つの明確に定義された 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オーバーロードのいずれかを使用します。

Note

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 指定したタイムアウト間隔を超えて完了するワークフローは、ワークフローがアイドル状態にならない場合に正常に完了します。

適用対象

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 がスローされるまでにワークフローを完了する必要がある間隔。

返品

TResult

アクティビティの実行結果を含む TResult 型の値。

次の例では、2 つの入力引数を持つ 1 つの Add アクティビティで構成されるワークフローを呼び出します。これは、 CodeActivity<int> から派生しているため、1 つの明確に定義された 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 がスローされます。

Note

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 指定したタイムアウト間隔を超えて完了するワークフローは、ワークフローがアイドル状態にならない場合に正常に完了します。

適用対象

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 がスローされるまでにワークフローを完了する必要がある間隔。

返品

TResult

アクティビティの実行結果を含む TResult 型の値。

次の例では、2 つの入力引数を持つ 1 つの Add アクティビティで構成されるワークフローを呼び出します。これは、 CodeActivity<int> から派生しているため、1 つの明確に定義された 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 がスローされます。

Note

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 指定したタイムアウト間隔を超えて完了するワークフローは、ワークフローがアイドル状態にならない場合に正常に完了します。

適用対象