WorkflowInvoker.Invoke Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vyvolá pracovní postup synchronně a vrátí slovník kořenové aktivity OutArgument a InOutArgument hodnoty klíčované podle názvu argumentu, který představuje výstupy pracovního postupu.
Přetížení
| Name | Description |
|---|---|
| Invoke(Activity, IDictionary<String,Object>, TimeSpan) |
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu, IDictionary<TKey,TValue> vstupních parametrů a intervalu časového limitu. |
| Invoke(Activity, TimeSpan) |
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu a časového limitu. |
| Invoke(Activity, IDictionary<String,Object>) |
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu a IDictionary<TKey,TValue> vstupních parametrů. |
| Invoke(IDictionary<String,Object>, TimeSpan) |
Vyvolá aktivitu předanou WorkflowInvoker(Activity) konstruktoru synchronně se zadanými IDictionary<TKey,TValue> vstupními parametry a zadaným intervalem časového limitu. |
| Invoke(IDictionary<String,Object>) |
Vyvolá aktivitu předanou WorkflowInvoker(Activity) konstruktoru synchronně se zadanými IDictionary<TKey,TValue> vstupními parametry. |
| Invoke(Activity) |
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu. |
| Invoke() |
Vyvolá pracovní postup synchronně pomocí definice pracovního postupu předaného konstruktoru WorkflowInvoker(Activity) . |
| Invoke(TimeSpan) |
Vyvolá pracovní postup synchronně se zadaným intervalem časového limitu. |
| Invoke<TResult>(Activity<TResult>) |
Vyvolá pracovní postup synchronně pomocí definice pracovního postupu předaného konstruktoru WorkflowInvoker(Activity) . |
| Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>) |
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu a IDictionary<TKey,TValue> vstupních parametrů. |
| Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan) |
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu, IDictionary<TKey,TValue> vstupních parametrů a intervalu časového limitu. |
| Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan) |
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu, IDictionary<TKey,TValue> vstupních parametrů, IDictionary<TKey,TValue> dalších výstupních parametrů a časového limitu intervalu. |
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Chcete-li nakonfigurovat časový limit, ve kterém musí pracovní postup dokončit, použijte jedno z Invoke přetížení, které trvá TimeSpan.
Invoke(Activity, IDictionary<String,Object>, TimeSpan)
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu, IDictionary<TKey,TValue> vstupních parametrů a intervalu časového limitu.
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)
Parametry
- workflow
- Activity
Definice pracovního postupu, která se má vyvolat.
- inputs
- IDictionary<String,Object>
Slovník vstupních parametrů pracovního postupu s klíči podle názvu argumentu.
- timeout
- TimeSpan
Interval, ve kterém se pracovní postup musí dokončit, než se přeruší a TimeoutException vyvolá se.
Návraty
Slovník kořenových aktivit OutArgument a InOutArgument hodnot klíčovaných podle názvu argumentu, který představuje výstupy pracovního postupu.
Příklady
Následující příklad vyvolá pracovní postup, který obsahuje dvě WriteLine aktivity a aktivitu nakonfigurovanou Delay s minutou Duration . Tento pracovní postup se vyvolá dvakrát; čas první s časovým limitem intervalu dvou minut a druhý s časovým limitem intervalu 30 sekund. První pracovní postup se úspěšně dokončí, ale druhý pracovní postup není a TimeoutException vyvolá se.
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);
}
Příklad použití Invoke se vstupními a výstupními argumenty naleznete v přetížení Invoke se stejnými parametry jako toto přetížení bez intervalu časového limitu.
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Pokud se pracovní postup nedokončí v zadaném intervalu časového limitu, pracovní postup se přeruší a TimeoutException vyvolá se.
Note
TimeoutException je vyvolán pouze, pokud časový limit uplyne a pracovní postup se během provádění stane nečinným. Pracovní postup, který trvá déle, než je zadaný interval časového limitu, se úspěšně dokončí, pokud pracovní postup nebude nečinný.
Platí pro
Invoke(Activity, TimeSpan)
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu a časového limitu.
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)
Parametry
- workflow
- Activity
Definice pracovního postupu, která se má vyvolat.
- timeout
- TimeSpan
Interval, ve kterém se pracovní postup musí dokončit, než se přeruší a TimeoutException vyvolá se.
Návraty
Slovník kořenových aktivit OutArgument a InOutArgument hodnot klíčovaných podle názvu argumentu, který představuje výstupy pracovního postupu.
Příklady
Následující příklad vyvolá pracovní postup, který obsahuje dvě WriteLine aktivity a aktivitu nakonfigurovanou Delay s minutou Duration . Tento pracovní postup se vyvolá dvakrát; čas první s časovým limitem intervalu dvou minut a druhý s časovým limitem intervalu 30 sekund. První pracovní postup se úspěšně dokončí, ale druhý pracovní postup není a TimeoutException vyvolá se.
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);
}
Příklad použití Invoke s výstupními argumenty, viz přetížení Invoke se stejnými parametry jako toto přetížení bez časového limitu intervalu.
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Pokud se pracovní postup nedokončí v zadaném intervalu časového limitu, pracovní postup se přeruší a TimeoutException vyvolá se.
Note
TimeoutException je vyvolán pouze, pokud časový limit uplyne a pracovní postup se během provádění stane nečinným. Pracovní postup, který trvá déle, než je zadaný interval časového limitu, se úspěšně dokončí, pokud pracovní postup nebude nečinný.
Platí pro
Invoke(Activity, IDictionary<String,Object>)
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu a IDictionary<TKey,TValue> vstupních parametrů.
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)
Parametry
- workflow
- Activity
Definice pracovního postupu, která se má vyvolat.
- inputs
- IDictionary<String,Object>
Slovník vstupních parametrů pracovního postupu s klíči podle názvu argumentu.
Návraty
Slovník kořenových aktivit OutArgument a InOutArgument hodnot klíčovaných podle názvu argumentu, který představuje výstupy pracovního postupu.
Příklady
Následující příklad vyvolá pracovní postup sestávající z jedné Divide aktivity, která má dva vstupní argumenty a dva výstupní argumenty. Při vyvolání pracovního postupu se předá slovník, arguments který obsahuje hodnoty pro každý vstupní argument s klíči podle názvu argumentu. Když se volání Invoke vrátí, každý výstupní argument je ve slovníku outputs, klíčovaný podle názvu argumentu.
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"]);
Pokud pracovní postup pochází z ActivityWithResultargumentu , například CodeActivity<TResult> nebo Activity<TResult>, a existují výstupní argumenty kromě dobře definovaného Result výstupního argumentu, musí být použita ne generická přetížení Invoke, jako je tento, pro načtení dalších argumentů. Aby se tak stalo, definice pracovního postupu předaná do Invoke musí být typu Activity. V tomto příkladu Divide aktivita je odvozena od CodeActivity<int>, ale je deklarována jako Activity tak, že toto přetížení Invoke, který vrací slovník argumentů místo jedné návratové hodnoty, je použita.
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"]);
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Chcete-li nakonfigurovat časový limit, ve kterém musí pracovní postup dokončit, použijte jedno z Invoke přetížení, které trvá TimeSpan.
Platí pro
Invoke(IDictionary<String,Object>, TimeSpan)
Vyvolá aktivitu předanou WorkflowInvoker(Activity) konstruktoru synchronně se zadanými IDictionary<TKey,TValue> vstupními parametry a zadaným intervalem časového limitu.
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)
Parametry
- inputs
- IDictionary<String,Object>
Slovník vstupních parametrů pracovního postupu s klíči podle názvu argumentu.
- timeout
- TimeSpan
Interval, ve kterém se pracovní postup musí dokončit, než se přeruší a TimeoutException vyvolá se.
Návraty
Slovník kořenových aktivit OutArgument a InOutArgument hodnot klíčovaných podle názvu argumentu, který představuje výstupy pracovního postupu.
Příklady
Následující příklad vyvolá pracovní postup, který obsahuje dvě WriteLine aktivity a aktivitu nakonfigurovanou Delay s minutou Duration . Tento pracovní postup se vyvolá dvakrát; čas první s časovým limitem intervalu dvou minut a druhý s časovým limitem intervalu 30 sekund. První pracovní postup se úspěšně dokončí, ale druhý pracovní postup není vyvolán a TimeoutException zobrazí se následující zpráva.
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);
}
Příklad použití Invoke se vstupními a výstupními argumenty naleznete v přetížení Invoke se stejnými parametry jako toto přetížení bez intervalu časového limitu.
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Pokud se pracovní postup nedokončí v zadaném intervalu časového limitu, pracovní postup se přeruší a TimeoutException vyvolá se.
Note
TimeoutException je vyvolán pouze, pokud časový limit uplyne a pracovní postup se během provádění stane nečinným. Pracovní postup, který trvá déle, než je zadaný interval časového limitu, se úspěšně dokončí, pokud pracovní postup nebude nečinný.
Platí pro
Invoke(IDictionary<String,Object>)
Vyvolá aktivitu předanou WorkflowInvoker(Activity) konstruktoru synchronně se zadanými IDictionary<TKey,TValue> vstupními parametry.
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)
Parametry
- inputs
- IDictionary<String,Object>
Slovník vstupních parametrů pracovního postupu s klíči podle názvu argumentu.
Návraty
Slovník kořenových aktivit OutArgument a InOutArgument hodnot klíčovaných podle názvu argumentu, který představuje výstupy pracovního postupu.
Příklady
Následující příklad vyvolá pracovní postup sestávající z jedné Divide aktivity, která má dva vstupní argumenty a dva výstupní argumenty. Při vyvolání pracovního postupu se předá slovník, arguments který obsahuje hodnoty pro každý vstupní argument s klíči podle názvu argumentu. Když se volání Invoke vrátí, každý výstupní argument je ve slovníku outputs, klíčovaný podle názvu argumentu.
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"]);
Pokud pracovní postup pochází z ActivityWithResultargumentu , například CodeActivity<TResult> nebo Activity<TResult>, a existují výstupní argumenty kromě dobře definovaného Result výstupního argumentu, musí být použita ne generická přetížení Invoke, jako je tento, pro načtení dalších argumentů. K tomu musí být definice pracovního postupu předaná do konstruktoru WorkflowInvoker typu Activity. V tomto příkladu Divide aktivita je odvozena od CodeActivity<int>, ale je deklarována jako Activity tak, že toto přetížení Invoke, který vrací slovník argumentů místo jedné návratové hodnoty, je použita.
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"]);
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Chcete-li nakonfigurovat časový limit, ve kterém musí pracovní postup dokončit, použijte jedno z Invoke přetížení, které trvá TimeSpan.
Platí pro
Invoke(Activity)
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu.
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)
Parametry
- workflow
- Activity
Definice pracovního postupu, která se má vyvolat.
Návraty
Slovník kořenových aktivit OutArgument a InOutArgument hodnot klíčovaných podle názvu argumentu, který představuje výstupy pracovního postupu.
Příklady
Následující příklad vyvolá pracovní postup skládající se z jedné DiceRoll aktivity. Aktivita DiceRoll má dva výstupní argumenty, které představují výsledky operace hodu kostky. Když se volání vrátí Invoke , vrátí se každý výstupní argument ve slovníku výstupů s klíčem podle názvu argumentu.
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"]);
Pokud kořenová aktivita pracovního postupu nemá žádné výstupní argumenty nebo nejsou hostitelem potřeba, mohou být ignorovány. Následující příklad vyvolá pracovní postup sestávající z jedné WriteLine aktivity, která nemá žádné výstupní argumenty.
Activity wf = new WriteLine
{
Text = "Hello World."
};
WorkflowInvoker.Invoke(wf);
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Chcete-li nakonfigurovat časový limit, ve kterém musí pracovní postup dokončit, použijte jedno z Invoke přetížení, které trvá TimeSpan.
Platí pro
Invoke()
Vyvolá pracovní postup synchronně pomocí definice pracovního postupu předaného konstruktoru 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)
Návraty
Slovník kořenových aktivit OutArgument a InOutArgument hodnot klíčovaných podle názvu argumentu, který představuje výstupy pracovního postupu.
Příklady
Následující příklad vyvolá pracovní postup skládající se z jedné DiceRoll aktivity. Aktivita DiceRoll má dva výstupní argumenty, které představují výsledky operace hodu kostky. Když se volání vrátí Invoke , vrátí se každý výstupní argument ve slovníku výstupů s klíčem podle názvu argumentu. Pracovní postup se vyvolá dvakrát pomocí definice pracovního postupu předaného do konstruktoru 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"]);
Pokud kořenová aktivita pracovního postupu nemá žádné výstupní argumenty nebo nejsou hostitelem potřeba, mohou být ignorovány. Následující příklad vyvolá pracovní postup sestávající z jedné WriteLine aktivity, která nemá žádné výstupní argumenty.
Activity wf = new WriteLine
{
Text = "Hello World."
};
WorkflowInvoker invoker = new WorkflowInvoker(wf);
invoker.Invoke();
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Chcete-li nakonfigurovat časový limit, ve kterém musí pracovní postup dokončit, použijte jedno z Invoke přetížení, které trvá TimeSpan.
Platí pro
Invoke(TimeSpan)
Vyvolá pracovní postup synchronně se zadaným intervalem časového limitu.
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)
Parametry
- timeout
- TimeSpan
Interval, ve kterém se pracovní postup musí dokončit, než se přeruší a TimeoutException vyvolá se.
Návraty
Slovník kořenových aktivit OutArgument a InOutArgument hodnot klíčovaných podle názvu argumentu, který představuje výstupy pracovního postupu.
Příklady
Následující příklad vyvolá pracovní postup, který obsahuje dvě WriteLine aktivity a aktivitu nakonfigurovanou Delay s minutou Duration . Tento pracovní postup se vyvolá dvakrát; čas první s časovým limitem intervalu dvou minut a druhý s časovým limitem intervalu 30 sekund. První pracovní postup se úspěšně dokončí, ale druhý pracovní postup není vyvolán a TimeoutException zobrazí se následující zpráva.
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);
}
Příklad použití Invoke s výstupními argumenty, viz přetížení Invoke se stejnými parametry jako toto přetížení bez časového limitu intervalu.
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Pokud se pracovní postup nedokončí v zadaném intervalu časového limitu, pracovní postup se přeruší a TimeoutException vyvolá se.
Note
TimeoutException je vyvolán pouze, pokud časový limit uplyne a pracovní postup se během provádění stane nečinným. Pracovní postup, který trvá déle, než je zadaný interval časového limitu, se úspěšně dokončí, pokud pracovní postup nebude nečinný.
Platí pro
Invoke<TResult>(Activity<TResult>)
Vyvolá pracovní postup synchronně pomocí definice pracovního postupu předaného konstruktoru 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
Parametry typu
- TResult
Typ pracovního postupu.
Parametry
- workflow
- Activity<TResult>
Definice pracovního postupu, která se má vyvolat. Definice pracovního postupu musí být odvozena od ActivityWithResult.
Návraty
Hodnota typu TResult s výsledkem provádění aktivity.
Příklady
Následující příklad vyvolá pracovní postup skládající se z jedné Add aktivity, která má dva vstupní argumenty a vzhledem k tomu, že z CodeActivity<int> něj má jeden dobře definovaný Result výstupní argument. Při vyvolání pracovního postupu se předá slovník, arguments který obsahuje hodnoty pro každý vstupní argument s klíči podle názvu argumentu. Když se volání vrátí Invoke , vrátí se hodnota výstupního argumentu 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);
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Chcete-li nakonfigurovat časový limit, ve kterém musí pracovní postup dokončit, použijte jedno z Invoke přetížení, které trvá TimeSpan.
Platí pro
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>)
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu a IDictionary<TKey,TValue> vstupních parametrů.
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
Parametry typu
- TResult
Typ pracovního postupu.
Parametry
- workflow
- Activity<TResult>
Definice pracovního postupu, která se má vyvolat.
- inputs
- IDictionary<String,Object>
Slovník vstupních parametrů pracovního postupu s klíči podle názvu argumentu.
Návraty
Hodnota typu TResult s výsledkem provádění aktivity.
Příklady
Následující příklad vyvolá pracovní postup skládající se z jedné Add aktivity, která má dva vstupní argumenty a vzhledem k tomu, že z CodeActivity<int> něj má jeden dobře definovaný Result výstupní argument. Při vyvolání pracovního postupu se předá slovník, arguments který obsahuje hodnoty pro každý vstupní argument s klíči podle názvu argumentu. Když se volání vrátí Invoke , vrátí se hodnota výstupního argumentu 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);
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Chcete-li nakonfigurovat časový limit, ve kterém musí pracovní postup dokončit, použijte jedno z Invoke přetížení, které trvá TimeSpan.
Note
TimeoutException je vyvolán pouze, pokud časový limit uplyne a pracovní postup se během provádění stane nečinným. Pracovní postup, který trvá déle, než je zadaný interval časového limitu, se úspěšně dokončí, pokud pracovní postup nebude nečinný.
Platí pro
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan)
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu, IDictionary<TKey,TValue> vstupních parametrů a intervalu časového limitu.
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
Parametry typu
- TResult
Typ pracovního postupu.
Parametry
- workflow
- Activity<TResult>
Definice pracovního postupu, která se má vyvolat.
- inputs
- IDictionary<String,Object>
Slovník vstupních parametrů pracovního postupu s klíči podle názvu argumentu.
- timeout
- TimeSpan
Interval, ve kterém se pracovní postup musí dokončit, než se přeruší a TimeoutException vyvolá se.
Návraty
Hodnota typu TResult s výsledkem provádění aktivity.
Příklady
Následující příklad vyvolá pracovní postup skládající se z jedné Add aktivity, která má dva vstupní argumenty a vzhledem k tomu, že z CodeActivity<int> něj má jeden dobře definovaný Result výstupní argument. Při vyvolání pracovního postupu se předá slovník, arguments který obsahuje hodnoty pro každý vstupní argument s klíči podle názvu argumentu. Když se volání vrátí Invoke , vrátí se hodnota výstupního argumentu 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);
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Pokud se pracovní postup nedokončí v zadaném intervalu časového limitu, pracovní postup se přeruší a TimeoutException vyvolá se.
Note
TimeoutException je vyvolán pouze, pokud časový limit uplyne a pracovní postup se během provádění stane nečinným. Pracovní postup, který trvá déle, než je zadaný interval časového limitu, se úspěšně dokončí, pokud pracovní postup nebude nečinný.
Platí pro
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan)
Vyvolá pracovní postup synchronně pomocí zadané definice pracovního postupu, IDictionary<TKey,TValue> vstupních parametrů, IDictionary<TKey,TValue> dalších výstupních parametrů a časového limitu intervalu.
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
Parametry typu
- TResult
Typ pracovního postupu.
Parametry
- workflow
- Activity<TResult>
Definice pracovního postupu, která se má vyvolat.
- inputs
- IDictionary<String,Object>
Slovník vstupních parametrů pracovního postupu s klíči podle názvu argumentu.
- additionalOutputs
- IDictionary<String,Object>
Slovník dalších výstupních parametrů pracovního postupu s klíči podle názvu argumentu.
- timeout
- TimeSpan
Interval, ve kterém se pracovní postup musí dokončit, než se přeruší a TimeoutException vyvolá se.
Návraty
Hodnota typu TResult s výsledkem provádění aktivity.
Příklady
Následující příklad vyvolá pracovní postup skládající se z jedné Add aktivity, která má dva vstupní argumenty a vzhledem k tomu, že z CodeActivity<int> něj má jeden dobře definovaný Result výstupní argument. Při vyvolání pracovního postupu se předá slovník, arguments který obsahuje hodnoty pro každý vstupní argument s klíči podle názvu argumentu. Když se volání vrátí Invoke , vrátí se hodnota výstupního argumentu 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);
Poznámky
Tato metoda blokuje, dokud se pracovní postup nedokončí, včetně doby nečinnosti. U vyvolání vlákna je zaručeno, že se spustí všechna spuštění pracovního postupu. Pokud se pracovní postup nedokončí v zadaném intervalu časového limitu, pracovní postup se přeruší a TimeoutException vyvolá se.
Note
TimeoutException je vyvolán pouze, pokud časový limit uplyne a pracovní postup se během provádění stane nečinným. Pracovní postup, který trvá déle, než je zadaný interval časového limitu, se úspěšně dokončí, pokud pracovní postup nebude nečinný.