次の方法で共有


WorkflowInvoker.Invoke メソッド

定義

ワークフローを同期的に呼び出して、引数名によってキー指定されるルート アクティビティの OutArgument 値および InOutArgument 値のディクショナリを返します。これらの値は、ワークフローの出力を表します。

オーバーロード

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

指定されたワークフロー定義、入力パラメーターの IDictionary<TKey,TValue>、およびタイムアウト時間を使用して、1 つのワークフローを同期的に呼び出します。

Invoke(Activity, TimeSpan)

指定されたワークフロー定義およびタイムアウト時間を使用して、1 つのワークフローを同期的に呼び出します。

Invoke(Activity, IDictionary<String,Object>)

指定されたワークフロー定義、および入力パラメーターの IDictionary<TKey,TValue> を使用して、1 つのワークフローを同期的に呼び出します。

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> を使用して、1 つのワークフローを同期的に呼び出します。

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

指定されたワークフロー定義、入力パラメーターの IDictionary<TKey,TValue>、およびタイムアウト時間を使用して、1 つのワークフローを同期的に呼び出します。

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

指定されたワークフロー定義、入力パラメーターの IDictionary<TKey,TValue>、追加の出力パラメーターの IDictionary<TKey,TValue>、およびタイムアウト時間を使用して、1 つのワークフローを同期的に呼び出します。

注釈

このメソッドは、アイドル時間も含めてワークフローが完了するまでブロックします。 ワークフローの実行はすべて、呼び出し元スレッド上で実行されることが保証されています。 ワークフローを完了しなければならないタイムアウト時間を構成するには、Invoke を受け取る TimeSpan オーバーロードのいずれかを使用します。

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

指定されたワークフロー定義、入力パラメーターの IDictionary<TKey,TValue>、およびタイムアウト時間を使用して、1 つのワークフローを同期的に呼び出します。

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 分として設定した 1 つの Duration アクティビティを持つワークフローを呼び出します。 このワークフローは、1 回目は 2 分のタイムアウト時間、2 回目は 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 がスローされます。

注意

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

適用対象

Invoke(Activity, TimeSpan)

指定されたワークフロー定義およびタイムアウト時間を使用して、1 つのワークフローを同期的に呼び出します。

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 分として設定した 1 つの Duration アクティビティを持つワークフローを呼び出します。 このワークフローは、1 回目は 2 分のタイムアウト時間、2 回目は 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 がスローされます。

注意

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

適用対象

Invoke(Activity, IDictionary<String,Object>)

指定されたワークフロー定義、および入力パラメーターの IDictionary<TKey,TValue> を使用して、1 つのワークフローを同期的に呼び出します。

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

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

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 分として設定した 1 つの Duration アクティビティを持つワークフローを呼び出します。 このワークフローは、1 回目は 2 分のタイムアウト時間、2 回目は 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 がスローされます。

注意

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

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

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 分として設定した 1 つの Duration アクティビティを持つワークフローを呼び出します。 このワークフローは、1 回目は 2 分のタイムアウト時間、2 回目は 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 がスローされます。

注意

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 つの適切に定義Resultされた出力引数を持つ 1 つのAddアクティビティでCodeActivity<int>構成されるワークフローを呼び出します。 ワークフローを呼び出すと、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> を使用して、1 つのワークフローを同期的に呼び出します。

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 つの適切に定義Resultされた出力引数を持つ 1 つのAddアクティビティでCodeActivity<int>構成されるワークフローを呼び出します。 ワークフローを呼び出すと、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 がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 指定されたタイムアウト時間内には完了しないワークフローが正常に完了するのは、アイドル状態にならない場合です。

適用対象

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

指定されたワークフロー定義、入力パラメーターの IDictionary<TKey,TValue>、およびタイムアウト時間を使用して、1 つのワークフローを同期的に呼び出します。

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 つの適切に定義Resultされた出力引数を持つ 1 つのAddアクティビティでCodeActivity<int>構成されるワークフローを呼び出します。 ワークフローを呼び出すと、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 がスローされます。

注意

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

適用対象

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

指定されたワークフロー定義、入力パラメーターの IDictionary<TKey,TValue>、追加の出力パラメーターの IDictionary<TKey,TValue>、およびタイムアウト時間を使用して、1 つのワークフローを同期的に呼び出します。

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 つの適切に定義Resultされた出力引数を持つ 1 つのAddアクティビティでCodeActivity<int>構成されるワークフローを呼び出します。 ワークフローを呼び出すと、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 がスローされます。

注意

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

適用対象