WorkflowInvoker.Invoke メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ワークフローを同期的に呼び出して、引数名によってキー指定されるルート アクティビティの OutArgument 値および InOutArgument 値のディクショナリを返します。これらの値は、ワークフローの出力を表します。
オーバーロード
注釈
このメソッドは、アイドル時間も含めてワークフローが完了するまでブロックします。 ワークフローの実行はすべて、呼び出し元スレッド上で実行されることが保証されています。 ワークフローを完了しなければならないタイムアウト時間を構成するには、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
引数を取得するために、 の非ジェネリック オーバーロード (このオーバーロードなど) を使用する必要があります。 これを行うには、コンストラクターに渡されるワークフロー定義が WorkflowInvoker
型 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();
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 の値およびアクティビティの実行結果。
例
次の例では、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 の値およびアクティビティの実行結果。
例
次の例では、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 の値およびアクティビティの実行結果。
例
次の例では、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 の値およびアクティビティの実行結果。
例
次の例では、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 がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 指定されたタイムアウト時間内には完了しないワークフローが正常に完了するのは、アイドル状態にならない場合です。
適用対象
.NET