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
工作流程必須完成的間隔,然後才會中止並拋出 a TimeoutException 。
傳回
一個根活動 OutArgument 的字典, InOutArgument 並以參數名稱標示,代表工作流程的輸出。
範例
以下範例呼叫一個包含兩個 WriteLine 活動和一個 Delay 設定為 Duration 一分鐘的活動的工作流程。 此工作流程會被呼叫兩次;第一次有兩分鐘的暫停間隔,第二次則有30秒的暫停間隔。 第一個工作流程成功完成,但第二個流程沒有,導致拋出 a 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 超載,且參數與此超載相同,但不含逾時區間。
備註
此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a 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
工作流程必須完成的間隔,然後才會中止並拋出 a TimeoutException 。
傳回
一個根活動 OutArgument 的字典, InOutArgument 並以參數名稱標示,代表工作流程的輸出。
範例
以下範例呼叫一個包含兩個 WriteLine 活動和一個 Delay 設定為 Duration 一分鐘的活動的工作流程。 此工作流程會被呼叫兩次;第一次有兩分鐘的暫停間隔,第二次則有30秒的暫停間隔。 第一個工作流程成功完成,但第二個流程沒有,導致拋出 a 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 。
備註
此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a 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 並以參數名稱標示,代表工作流程的輸出。
範例
下列範例會叫用由具有兩個輸入自變數和兩個輸出自變數的單 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
工作流程必須完成的間隔,然後才會中止並拋出 a TimeoutException 。
傳回
一個根活動 OutArgument 的字典, InOutArgument 並以參數名稱標示,代表工作流程的輸出。
範例
以下範例呼叫一個包含兩個 WriteLine 活動和一個 Delay 設定為 Duration 一分鐘的活動的工作流程。 此工作流程會被呼叫兩次;第一次有兩分鐘的暫停間隔,第二次則有30秒的暫停間隔。 第一個工作流程成功完成,但第二個流程沒有,因此拋出 a 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 超載,且參數與此超載相同,但不含逾時區間。
備註
此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a 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 並以參數名稱標示,代表工作流程的輸出。
範例
下列範例會叫用由具有兩個輸入自變數和兩個輸出自變數的單 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
工作流程必須完成的間隔,然後才會中止並拋出 a TimeoutException 。
傳回
一個根活動 OutArgument 的字典, InOutArgument 並以參數名稱標示,代表工作流程的輸出。
範例
以下範例呼叫一個包含兩個 WriteLine 活動和一個 Delay 設定為 Duration 一分鐘的活動的工作流程。 此工作流程會被呼叫兩次;第一次有兩分鐘的暫停間隔,第二次則有30秒的暫停間隔。 第一個工作流程成功完成,但第二個流程沒有,因此拋出 a 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 。
備註
此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a 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 類型的值,執行活動的結果。
範例
以下範例呼叫一個工作流程, 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
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
工作流程必須完成的間隔,然後才會中止並拋出 a 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);
備註
此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a 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
工作流程必須完成的間隔,然後才會中止並拋出 a 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);
備註
此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a TimeoutException 。
Note
TimeoutException只有在逾時間隔經過且工作流程在執行期間變成閑置時,才會擲回 。 若工作流程完成時間超過指定的逾時區間,若該流程未進入閒置狀態,則該流程成功完成。