WorkflowInvoker.Invoke 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
以同步方式调用工作流,返回根活动的 OutArgument 和 InOutArgument 值字典(由表示工作流输出的自变量名键控)。
重载
注解
此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 若要配置工作流必须在其间完成的超时间隔,请使用一种采用 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 值字典,由表示工作流输出的自变量名键控。
示例
下面的示例调用了一个工作流,该工作流包含两个 WriteLine 活动和一个 Delay 活动(使用 Duration 配置为一分钟)。 此工作流调用两次;第一次使用的超时间隔为两分钟,第二次使用的超时间隔为 30 秒。 第一个工作流成功完成,但第二个工作流未成功完成并引发 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)
使用指定的工作流定义和超时间隔以同步方式调用工作流。
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 值字典,由表示工作流输出的自变量名键控。
示例
下面的示例调用了一个工作流,该工作流包含两个 WriteLine 活动和一个 Delay 活动(使用 Duration 配置为一分钟)。 此工作流调用两次;第一次使用的超时间隔为两分钟,第二次使用的超时间隔为 30 秒。 第一个工作流成功完成,但第二个工作流未成功完成并引发 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> 以同步方式调用工作流。
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 值字典,由表示工作流输出的自变量名键控。
示例
下面的示例调用一个工作流,该工作流包含有两个输入自变量和两个输出自变量的单个 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 之前在其中完成的时间间隔。
返回
根活动的 OutArgument 和 InOutArgument 值字典,由表示工作流输出的自变量名键控。
示例
下面的示例调用了一个工作流,该工作流包含两个 WriteLine 活动和一个 Delay 活动(使用 Duration 配置为一分钟)。 此工作流调用两次;第一次使用的超时间隔为两分钟,第二次使用的超时间隔为 30 秒。 第一个工作流成功完成,但第二个工作流未成功完成,而是引发 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 值字典,由表示工作流输出的自变量名键控。
示例
下面的示例调用一个工作流,该工作流包含有两个输入自变量和两个输出自变量的单个 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
要调用的工作流的工作流定义。
返回
根活动的 OutArgument 和 InOutArgument 值字典,由表示工作流输出的自变量名键控。
示例
下面的示例调用包含单个 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)
返回
根活动的 OutArgument 和 InOutArgument 值字典,由表示工作流输出的自变量名键控。
示例
下面的示例调用包含单个 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 之前在其中完成的时间间隔。
返回
根活动的 OutArgument 和 InOutArgument 值字典,由表示工作流输出的自变量名键控。
示例
下面的示例调用了一个工作流,该工作流包含两个 WriteLine 活动和一个 Delay 活动(使用 Duration 配置为一分钟)。 此工作流调用两次;第一次使用的超时间隔为两分钟,第二次使用的超时间隔为 30 秒。 第一个工作流成功完成,但第二个工作流未成功完成,而是引发 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 类型的值。
示例
以下示例调用一个工作流,该工作流由具有两个输入参数的单个 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 类型的值。
示例
以下示例调用一个工作流,该工作流由具有两个输入参数的单个 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。 如果工作流未进入空闲状态,那么完成时间超过指定超时间隔的工作流将会成功完成。
适用于
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 类型的值。
示例
以下示例调用一个工作流,该工作流由具有两个输入参数的单个 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。
注意
仅在达到超时间隔且工作流在执行期间进入空闲状态时才会引发 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 类型的值。
示例
以下示例调用一个工作流,该工作流由具有两个输入参数的单个 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。
注意
仅在达到超时间隔且工作流在执行期间进入空闲状态时才会引发 TimeoutException。 如果工作流未进入空闲状态,那么完成时间超过指定超时间隔的工作流将会成功完成。