WorkflowInvoker.Invoke Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Richiama un flusso di lavoro in modo sincrono e restituisce un dizionario dei valori OutArgument e InOutArgument dell'attività radice con chiave basata sul nome dell'argomento che rappresentano gli output del flusso di lavoro.
Overload
Invoke(Activity, IDictionary<String,Object>, TimeSpan) |
Richiama in modo sincrono un flusso di lavoro usando la definizione di flusso di lavoro specificata, il IDictionary<TKey,TValue> dei parametri di input e l'intervallo di timeout. |
Invoke(Activity, TimeSpan) |
Richiama in modo sincrono un flusso di lavoro usando la definizione di flusso di lavoro specificata e i parametri di input. |
Invoke(Activity, IDictionary<String,Object>) |
Richiama in modo sincrono un flusso di lavoro usando la definizione di flusso di lavoro e il IDictionary<TKey,TValue> dei parametri di input. |
Invoke(IDictionary<String,Object>, TimeSpan) |
Richiama l'attività passata in modo sincrono al costruttore WorkflowInvoker(Activity) con IDictionary<TKey,TValue> specificato dei parametri di input e l'intervallo di timeout specificato. |
Invoke(IDictionary<String,Object>) |
Richiama l'attività passata in modo sincrono al costruttore WorkflowInvoker(Activity) con IDictionary<TKey,TValue> specificato dei parametri di input. |
Invoke(Activity) |
Richiama in modo sincrono un flusso di lavoro utilizzando la definizione del flusso di lavoro specificata. |
Invoke() |
Richiama in modo sincrono un flusso di lavoro utilizzando la definizione del flusso di lavoro passata al costruttore WorkflowInvoker(Activity). |
Invoke(TimeSpan) |
Richiama in modo sincrono un flusso di lavoro con intervallo di timeout specificato. |
Invoke<TResult>(Activity<TResult>) |
Richiama in modo sincrono un flusso di lavoro utilizzando la definizione del flusso di lavoro passata al costruttore WorkflowInvoker(Activity). |
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>) |
Richiama in modo sincrono un flusso di lavoro usando la definizione di flusso di lavoro e il IDictionary<TKey,TValue> dei parametri di input. |
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan) |
Richiama in modo sincrono un flusso di lavoro usando la definizione di flusso di lavoro specificata, il IDictionary<TKey,TValue> dei parametri di input e l'intervallo di timeout. |
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan) |
Richiama un flusso di lavoro in modo sincrono usando la definizione specificata di flusso di lavoro, il IDictionary<TKey,TValue> dei parametri di input, il IDictionary<TKey,TValue> dei parametri di output di uscita e l'intervallo di timeout. |
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Per configurare un intervallo di timeout nel quale il flusso di lavoro deve essere completato, usare uno degli overload Invoke che accettano un oggetto TimeSpan.
Invoke(Activity, IDictionary<String,Object>, TimeSpan)
Richiama in modo sincrono un flusso di lavoro usando la definizione di flusso di lavoro specificata, il IDictionary<TKey,TValue> dei parametri di input e l'intervallo di timeout.
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)
Parametri
- workflow
- Activity
Definizione del flusso di lavoro da richiamare.
- inputs
- IDictionary<String,Object>
Il dizionario di parametri di input al flusso di lavoro codificati dal nome dell'argomento.
- timeout
- TimeSpan
L'intervallo nel quale deve essere completato il flusso di lavoro prima che sia interrotto e un TimeoutException venga generato.
Restituisce
Un dizionario dei valori OutArgument e InOutArgument dell'attività radice con chiave basata sul nome dell'argomento che rappresentano gli output del flusso di lavoro.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro che contiene due attività WriteLine e un'attività Delay configurato con un Duration di un minuto. Questo flusso di lavoro viene richiamato due volte; la prima volta con un intervallo di timeout di due minuti e la seconda volta con un intervallo di timeout di 30 secondi. Il primo flusso di lavoro viene completato correttamente, ma non il secondo, che genera un'eccezione 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);
}
Per un esempio di utilizzo Invoke
con argomenti di input e output, vedere l'overload di con gli stessi parametri di questo overload senza l'intervallo di Invoke timeout.
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Se il flusso di lavoro non è completato nell'intervallo di timeout specificato il flusso di lavoro è interrotto e un TimeoutException viene generato.
Nota
L'eccezione TimeoutException viene generata solo se l'intervallo di timeout scade e il flusso di lavoro diventa inattivo durante l'esecuzione. Un flusso di lavoro il cui completamento richiede più tempo rispetto all'intervallo di timeout specificato viene completato correttamente se non diventa inattivo.
Si applica a
Invoke(Activity, TimeSpan)
Richiama in modo sincrono un flusso di lavoro usando la definizione di flusso di lavoro specificata e i parametri di input.
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)
Parametri
- workflow
- Activity
Definizione del flusso di lavoro da richiamare.
- timeout
- TimeSpan
L'intervallo nel quale deve essere completato il flusso di lavoro prima che sia interrotto e un TimeoutException venga generato.
Restituisce
Un dizionario dei valori OutArgument e InOutArgument dell'attività radice con chiave basata sul nome dell'argomento che rappresentano gli output del flusso di lavoro.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro che contiene due attività WriteLine e un'attività Delay configurato con un Duration di un minuto. Questo flusso di lavoro viene richiamato due volte; la prima volta con un intervallo di timeout di due minuti e la seconda volta con un intervallo di timeout di 30 secondi. Il primo flusso di lavoro viene completato correttamente, ma non il secondo, che genera un'eccezione 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);
}
Per un esempio di uso Invoke
con gli argomenti di output, vedere l'overload di con gli stessi parametri di questo overload senza l'intervallo di Invoke timeout.
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Se il flusso di lavoro non è completato nell'intervallo di timeout specificato il flusso di lavoro è interrotto e un TimeoutException viene generato.
Nota
L'eccezione TimeoutException viene generata solo se l'intervallo di timeout scade e il flusso di lavoro diventa inattivo durante l'esecuzione. Un flusso di lavoro il cui completamento richiede più tempo rispetto all'intervallo di timeout specificato viene completato correttamente se non diventa inattivo.
Si applica a
Invoke(Activity, IDictionary<String,Object>)
Richiama in modo sincrono un flusso di lavoro usando la definizione di flusso di lavoro e il IDictionary<TKey,TValue> dei parametri di input.
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)
Parametri
- workflow
- Activity
Definizione del flusso di lavoro da richiamare.
- inputs
- IDictionary<String,Object>
Il dizionario di parametri di input al flusso di lavoro codificati dal nome dell'argomento.
Restituisce
Un dizionario dei valori OutArgument e InOutArgument dell'attività radice con chiave basata sul nome dell'argomento che rappresentano gli output del flusso di lavoro.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro composto da una singola attività Divide
che dispone di due argomenti di input e due di output. Quando viene richiamato il flusso di lavoro, viene passato il dizionario arguments
che contiene i valori per ogni argomento di input, con chiavi in base al nome dell'argomento. Quando la chiamata a Invoke
restituisce un valore, ogni argomento di output viene restituito nel dizionario outputs
, anche con chiavi in base al nome dell'argomento.
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"]);
Se il flusso di lavoro deriva da ActivityWithResult, ad esempio o Activity<TResult>
e sono presenti argomenti di output oltre all'argomento di output ben definitoResult, è necessario usare un overload non generico di Invoke
, ad esempio CodeActivity<TResult>
questo, per recuperare gli argomenti aggiuntivi. A tale scopo, la definizione del flusso di lavoro passata in Invoke
deve essere di tipo Activity. In questo esempio l'attività Divide
deriva da CodeActivity<int>
, ma viene dichiarata come Activity in modo che questo overload di Invoke
, che restituisce un dizionario di argomenti anziché un singolo valore restituito, viene usato.
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"]);
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Per configurare un intervallo di timeout nel quale il flusso di lavoro deve essere completato, usare uno degli overload Invoke che accettano un oggetto TimeSpan.
Si applica a
Invoke(IDictionary<String,Object>, TimeSpan)
Richiama l'attività passata in modo sincrono al costruttore WorkflowInvoker(Activity) con IDictionary<TKey,TValue> specificato dei parametri di input e l'intervallo di timeout specificato.
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)
Parametri
- inputs
- IDictionary<String,Object>
Il dizionario di parametri di input al flusso di lavoro codificati dal nome dell'argomento.
- timeout
- TimeSpan
L'intervallo nel quale deve essere completato il flusso di lavoro prima che sia interrotto e un TimeoutException venga generato.
Restituisce
Un dizionario dei valori OutArgument e InOutArgument dell'attività radice con chiave basata sul nome dell'argomento che rappresentano gli output del flusso di lavoro.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro che contiene due attività WriteLine e un'attività Delay configurato con un Duration di un minuto. Questo flusso di lavoro viene richiamato due volte; la prima volta con un intervallo di timeout di due minuti e la seconda volta con un intervallo di timeout di 30 secondi. Il primo flusso di lavoro viene completato correttamente, ma non il secondo, che genera un'eccezione TimeoutException. Viene visualizzato il seguente messaggio.
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);
}
Per un esempio di utilizzo Invoke
con argomenti di input e output, vedere l'overload di con gli stessi parametri di questo overload senza l'intervallo di Invoke timeout.
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Se il flusso di lavoro non è completato nell'intervallo di timeout specificato il flusso di lavoro è interrotto e un TimeoutException viene generato.
Nota
L'eccezione TimeoutException viene generata solo se l'intervallo di timeout scade e il flusso di lavoro diventa inattivo durante l'esecuzione. Un flusso di lavoro il cui completamento richiede più tempo rispetto all'intervallo di timeout specificato viene completato correttamente se non diventa inattivo.
Si applica a
Invoke(IDictionary<String,Object>)
Richiama l'attività passata in modo sincrono al costruttore WorkflowInvoker(Activity) con IDictionary<TKey,TValue> specificato dei parametri di input.
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)
Parametri
- inputs
- IDictionary<String,Object>
Il dizionario di parametri di input al flusso di lavoro codificati dal nome dell'argomento.
Restituisce
Un dizionario dei valori OutArgument e InOutArgument dell'attività radice con chiave basata sul nome dell'argomento che rappresentano gli output del flusso di lavoro.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro composto da una singola attività Divide
che dispone di due argomenti di input e due di output. Quando viene richiamato il flusso di lavoro, viene passato il dizionario arguments
che contiene i valori per ogni argomento di input, con chiavi in base al nome dell'argomento. Quando la chiamata a Invoke
restituisce un valore, ogni argomento di output viene restituito nel dizionario outputs
, anche con chiavi in base al nome dell'argomento.
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"]);
Se il flusso di lavoro deriva da ActivityWithResult, ad esempio o Activity<TResult>
e sono presenti argomenti di output oltre all'argomento di output ben definitoResult, è necessario usare un overload non generico di Invoke
, ad esempio CodeActivity<TResult>
questo, per recuperare gli argomenti aggiuntivi. A tale scopo, la definizione del flusso di lavoro passata al WorkflowInvoker
costruttore deve essere di tipo Activity. In questo esempio l'attività Divide
deriva da CodeActivity<int>
, ma viene dichiarata come Activity in modo che questo overload di Invoke
, che restituisce un dizionario di argomenti anziché un singolo valore restituito, viene usato.
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"]);
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Per configurare un intervallo di timeout nel quale il flusso di lavoro deve essere completato, usare uno degli overload Invoke che accettano un oggetto TimeSpan.
Si applica a
Invoke(Activity)
Richiama in modo sincrono un flusso di lavoro utilizzando la definizione del flusso di lavoro specificata.
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)
Parametri
- workflow
- Activity
Definizione del flusso di lavoro da richiamare.
Restituisce
Un dizionario dei valori OutArgument e InOutArgument dell'attività radice con chiave basata sul nome dell'argomento che rappresentano gli output del flusso di lavoro.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro composto da una singola attività DiceRoll
. L'attività DiceRoll
dispone di due argomenti di output che rappresentano i risultati dell'operazione di lancio dei dadi. Nella restituzione della chiamata a Invoke
, ogni argomento di output viene restituito nel dizionario di output, con chiave basata sul nome dell'argomento.
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"]);
Se l'attività radice del flusso di lavoro non dispone di argomenti di output o se non sono necessari per l'host, è possibile ignorarli. Nell'esempio seguente viene richiamato un flusso di lavoro composto da una sola attività WriteLine che non dispone di argomenti di output.
Activity wf = new WriteLine
{
Text = "Hello World."
};
WorkflowInvoker.Invoke(wf);
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Per configurare un intervallo di timeout nel quale il flusso di lavoro deve essere completato, usare uno degli overload Invoke che accettano un oggetto TimeSpan.
Si applica a
Invoke()
Richiama in modo sincrono un flusso di lavoro utilizzando la definizione del flusso di lavoro passata al costruttore 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)
Restituisce
Un dizionario dei valori OutArgument e InOutArgument dell'attività radice con chiave basata sul nome dell'argomento che rappresentano gli output del flusso di lavoro.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro composto da una singola attività DiceRoll
. L'attività DiceRoll
dispone di due argomenti di output che rappresentano i risultati dell'operazione di lancio dei dadi. Nella restituzione della chiamata a Invoke
, ogni argomento di output viene restituito nel dizionario di output, con chiave basata sul nome dell'argomento. Il flusso di lavoro viene richiamato due volte, usando la definizione del flusso di lavoro passata nel WorkflowInvoker
costruttore.
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"]);
Se l'attività radice del flusso di lavoro non dispone di argomenti di output o se non sono necessari per l'host, è possibile ignorarli. Nell'esempio seguente viene richiamato un flusso di lavoro composto da una sola attività WriteLine che non dispone di argomenti di output.
Activity wf = new WriteLine
{
Text = "Hello World."
};
WorkflowInvoker invoker = new WorkflowInvoker(wf);
invoker.Invoke();
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Per configurare un intervallo di timeout nel quale il flusso di lavoro deve essere completato, usare uno degli overload Invoke che accettano un oggetto TimeSpan.
Si applica a
Invoke(TimeSpan)
Richiama in modo sincrono un flusso di lavoro con intervallo di timeout specificato.
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)
Parametri
- timeout
- TimeSpan
L'intervallo nel quale deve essere completato il flusso di lavoro prima che sia interrotto e un TimeoutException venga generato.
Restituisce
Un dizionario dei valori OutArgument e InOutArgument dell'attività radice con chiave basata sul nome dell'argomento che rappresentano gli output del flusso di lavoro.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro che contiene due attività WriteLine e un'attività Delay configurato con un Duration di un minuto. Questo flusso di lavoro viene richiamato due volte; la prima volta con un intervallo di timeout di due minuti e la seconda volta con un intervallo di timeout di 30 secondi. Il primo flusso di lavoro viene completato correttamente, ma non il secondo, che genera un'eccezione TimeoutException. Viene visualizzato il seguente messaggio.
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);
}
Per un esempio di utilizzo Invoke
con gli argomenti di output, vedere l'overload di Invoke con gli stessi parametri di questo overload senza l'intervallo di timeout.
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Se il flusso di lavoro non è completato nell'intervallo di timeout specificato il flusso di lavoro è interrotto e un TimeoutException viene generato.
Nota
L'eccezione TimeoutException viene generata solo se l'intervallo di timeout scade e il flusso di lavoro diventa inattivo durante l'esecuzione. Un flusso di lavoro il cui completamento richiede più tempo rispetto all'intervallo di timeout specificato viene completato correttamente se non diventa inattivo.
Si applica a
Invoke<TResult>(Activity<TResult>)
Richiama in modo sincrono un flusso di lavoro utilizzando la definizione del flusso di lavoro passata al costruttore 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
Parametri di tipo
- TResult
Il tipo di flusso di lavoro.
Parametri
- workflow
- Activity<TResult>
Definizione del flusso di lavoro da richiamare. La definizione di flusso di lavoro deriva da ActivityWithResult.
Restituisce
Un valore di tipo TResult con il risultato dell'esecuzione dell'attività.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro costituito da una singola Add
attività con due argomenti di input e poiché deriva da CodeActivity<int>
esso è presente un argomento di output ben definito Result . Quando viene richiamato il flusso di lavoro, viene passato il dizionario arguments
che contiene i valori per ogni argomento di input, con chiavi in base al nome dell'argomento. Quando viene restituita la chiamata a Invoke
, viene restituito il valore dell'argomento Result di output.
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);
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Per configurare un intervallo di timeout nel quale il flusso di lavoro deve essere completato, usare uno degli overload Invoke che accettano un oggetto TimeSpan.
Si applica a
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>)
Richiama in modo sincrono un flusso di lavoro usando la definizione di flusso di lavoro e il IDictionary<TKey,TValue> dei parametri di input.
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
Parametri di tipo
- TResult
Il tipo di flusso di lavoro.
Parametri
- workflow
- Activity<TResult>
Definizione del flusso di lavoro da richiamare.
- inputs
- IDictionary<String,Object>
Il dizionario di parametri di input al flusso di lavoro codificati dal nome dell'argomento.
Restituisce
Un valore di tipo TResult con il risultato dell'esecuzione dell'attività.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro costituito da una singola Add
attività con due argomenti di input e poiché deriva da CodeActivity<int>
esso è presente un argomento di output ben definito Result . Quando viene richiamato il flusso di lavoro, viene passato il dizionario arguments
che contiene i valori per ogni argomento di input, con chiavi in base al nome dell'argomento. Quando viene restituita la chiamata a Invoke
, viene restituito il valore dell'argomento Result di output.
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);
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Per configurare un intervallo di timeout nel quale il flusso di lavoro deve essere completato, usare uno degli overload Invoke che accettano un oggetto TimeSpan.
Nota
L'eccezione TimeoutException viene generata solo se l'intervallo di timeout scade e il flusso di lavoro diventa inattivo durante l'esecuzione. Un flusso di lavoro il cui completamento richiede più tempo rispetto all'intervallo di timeout specificato viene completato correttamente se non diventa inattivo.
Si applica a
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan)
Richiama in modo sincrono un flusso di lavoro usando la definizione di flusso di lavoro specificata, il IDictionary<TKey,TValue> dei parametri di input e l'intervallo di timeout.
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
Parametri di tipo
- TResult
Il tipo di flusso di lavoro.
Parametri
- workflow
- Activity<TResult>
Definizione del flusso di lavoro da richiamare.
- inputs
- IDictionary<String,Object>
Il dizionario di parametri di input al flusso di lavoro codificati dal nome dell'argomento.
- timeout
- TimeSpan
L'intervallo nel quale deve essere completato il flusso di lavoro prima che sia interrotto e un TimeoutException venga generato.
Restituisce
Un valore di tipo TResult con il risultato dell'esecuzione dell'attività.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro costituito da una singola Add
attività con due argomenti di input e poiché deriva da CodeActivity<int>
esso è presente un argomento di output ben definito Result . Quando viene richiamato il flusso di lavoro, viene passato il dizionario arguments
che contiene i valori per ogni argomento di input, con chiavi in base al nome dell'argomento. Quando viene restituita la chiamata a Invoke
, viene restituito il valore dell'argomento Result di output.
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);
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Se il flusso di lavoro non è completato nell'intervallo di timeout specificato il flusso di lavoro è interrotto e un TimeoutException viene generato.
Nota
L'eccezione TimeoutException viene generata solo se l'intervallo di timeout scade e il flusso di lavoro diventa inattivo durante l'esecuzione. Un flusso di lavoro il cui completamento richiede più tempo rispetto all'intervallo di timeout specificato viene completato correttamente se non diventa inattivo.
Si applica a
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan)
Richiama un flusso di lavoro in modo sincrono usando la definizione specificata di flusso di lavoro, il IDictionary<TKey,TValue> dei parametri di input, il IDictionary<TKey,TValue> dei parametri di output di uscita e l'intervallo di timeout.
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
Parametri di tipo
- TResult
Il tipo di flusso di lavoro.
Parametri
- workflow
- Activity<TResult>
Definizione del flusso di lavoro da richiamare.
- inputs
- IDictionary<String,Object>
Il dizionario di parametri di input al flusso di lavoro codificati dal nome dell'argomento.
- additionalOutputs
- IDictionary<String,Object>
Il dizionario di parametri di output aggiuntivi del flusso di lavoro codificati dal nome dell'argomento.
- timeout
- TimeSpan
L'intervallo nel quale deve essere completato il flusso di lavoro prima che sia interrotto e un TimeoutException venga generato.
Restituisce
Un valore di tipo TResult con il risultato dell'esecuzione dell'attività.
Esempio
Nell'esempio seguente viene richiamato un flusso di lavoro costituito da una singola Add
attività con due argomenti di input e poiché deriva da CodeActivity<int>
esso è presente un argomento di output ben definito Result . Quando viene richiamato il flusso di lavoro, viene passato il dizionario arguments
che contiene i valori per ogni argomento di input, con chiavi in base al nome dell'argomento. Quando viene restituita la chiamata a Invoke
, viene restituito il valore dell'argomento Result di output.
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);
Commenti
Questo metodo si blocca fino a che il flusso di lavoro è stato completato, mentre include tempo di inattività. Ogni esecuzione del flusso di lavoro è garantita per essere eseguita sul thread di chiamata. Se il flusso di lavoro non è completato nell'intervallo di timeout specificato il flusso di lavoro è interrotto e un TimeoutException viene generato.
Nota
L'eccezione TimeoutException viene generata solo se l'intervallo di timeout scade e il flusso di lavoro diventa inattivo durante l'esecuzione. Un flusso di lavoro il cui completamento richiede più tempo rispetto all'intervallo di timeout specificato viene completato correttamente se non diventa inattivo.