WorkflowInvoker.Invoke Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Invoca un flujo de trabajo de manera sincrónica y devuelve un diccionario de los valores OutArgument e InOutArgument de la actividad raíz ordenados por nombre de argumento que representan las salidas del flujo de trabajo.
Sobrecargas
Invoke(Activity, IDictionary<String,Object>, TimeSpan) |
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo, la interfaz IDictionary<TKey,TValue> de parámetros de entrada y el intervalo de tiempo de espera especificados. |
Invoke(Activity, TimeSpan) |
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo y el intervalo de tiempo de espera especificados. |
Invoke(Activity, IDictionary<String,Object>) |
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo y la interfaz IDictionary<TKey,TValue> de parámetros de entrada especificados. |
Invoke(IDictionary<String,Object>, TimeSpan) |
Invoca la actividad pasada al constructor WorkflowInvoker(Activity) sincrónicamente con la interfaz IDictionary<TKey,TValue> de parámetros de entrada y el intervalo de tiempo de espera especificados. |
Invoke(IDictionary<String,Object>) |
Invoca la actividad pasada al constructor WorkflowInvoker(Activity) sincrónicamente con la interfaz IDictionary<TKey,TValue> especificada de parámetros de entrada. |
Invoke(Activity) |
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo especificada. |
Invoke() |
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo pasada al constructor WorkflowInvoker(Activity). |
Invoke(TimeSpan) |
Invoca un flujo de trabajo sincrónicamente con el intervalo de tiempo de espera especificado. |
Invoke<TResult>(Activity<TResult>) |
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo pasada al constructor WorkflowInvoker(Activity). |
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>) |
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo y la interfaz IDictionary<TKey,TValue> de parámetros de entrada especificados. |
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan) |
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo, la interfaz IDictionary<TKey,TValue> de parámetros de entrada y el intervalo de tiempo de espera especificados. |
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan) |
Invoca un flujo de trabajo sincrónicamente mediante la definición de flujo de trabajo, la interfaz IDictionary<TKey,TValue> de parámetros de entrada, la interfaz IDictionary<TKey,TValue> de parámetros de salida adicionales y el intervalo de tiempo de espera especificados. |
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las sobrecargas Invoke que toman una estructura TimeSpan.
Invoke(Activity, IDictionary<String,Object>, TimeSpan)
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo, la interfaz IDictionary<TKey,TValue> de parámetros de entrada y el intervalo de tiempo de espera especificados.
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)
Parámetros
- workflow
- Activity
La definición del flujo de trabajo que se va a invocar.
- inputs
- IDictionary<String,Object>
El diccionario de parámetros de entrada para el flujo de trabajo, ordenados por nombre de argumento.
- timeout
- TimeSpan
Intervalo de tiempo en el que se debe completar el flujo de trabajo antes de quedar anulado y de que se produzca una excepción TimeoutException.
Devoluciones
Diccionario de los valores OutArgument e InOutArgument de la actividad raíz ordenados por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el siguiente ejemplo se invoca un flujo de trabajo que contiene dos actividades de la clase WriteLine y una actividad de la clase Delay configurada con una propiedad Duration de un minuto. Este flujo de trabajo se invoca dos veces; la primera vez con un intervalo de tiempo de espera de dos minutos y la segunda con un intervalo de tiempo de espera de 30 segundos. El primer flujo de trabajo se completa correctamente, pero el segundo no y se produce una excepción 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);
}
Para obtener un ejemplo de uso Invoke
con argumentos de entrada y salida, consulte la sobrecarga de Invoke con los mismos parámetros que esta sobrecarga sin el intervalo de tiempo de espera.
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Si el flujo de trabajo no se completa dentro del intervalo de tiempo de espera especificado, se anula el flujo de trabajo y se produce una excepción TimeoutException.
Nota
La excepción TimeoutException solo se produce si se agota el tiempo de espera y el flujo de trabajo queda inactivo durante la ejecución. Un flujo de trabajo que tarda en completarse más tiempo que el especificado por el intervalo de tiempo de espera se completa correctamente si el flujo de trabajo no queda inactivo.
Se aplica a
Invoke(Activity, TimeSpan)
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo y el intervalo de tiempo de espera especificados.
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)
Parámetros
- workflow
- Activity
La definición del flujo de trabajo que se va a invocar.
- timeout
- TimeSpan
Intervalo de tiempo en el que se debe completar el flujo de trabajo antes de quedar anulado y de que se produzca una excepción TimeoutException.
Devoluciones
Diccionario de los valores OutArgument e InOutArgument de la actividad raíz ordenados por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el siguiente ejemplo se invoca un flujo de trabajo que contiene dos actividades de la clase WriteLine y una actividad de la clase Delay configurada con una propiedad Duration de un minuto. Este flujo de trabajo se invoca dos veces; la primera vez con un intervalo de tiempo de espera de dos minutos y la segunda con un intervalo de tiempo de espera de 30 segundos. El primer flujo de trabajo se completa correctamente, pero el segundo no y se produce una excepción 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);
}
Para obtener un ejemplo de uso Invoke
con argumentos de salida, consulte la sobrecarga de Invoke con los mismos parámetros que esta sobrecarga sin el intervalo de tiempo de espera.
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Si el flujo de trabajo no se completa dentro del intervalo de tiempo de espera especificado, se anula el flujo de trabajo y se produce una excepción TimeoutException.
Nota
La excepción TimeoutException solo se produce si se agota el tiempo de espera y el flujo de trabajo queda inactivo durante la ejecución. Un flujo de trabajo que tarda en completarse más tiempo que el especificado por el intervalo de tiempo de espera se completa correctamente si el flujo de trabajo no queda inactivo.
Se aplica a
Invoke(Activity, IDictionary<String,Object>)
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo y la interfaz IDictionary<TKey,TValue> de parámetros de entrada especificados.
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)
Parámetros
- workflow
- Activity
La definición del flujo de trabajo que se va a invocar.
- inputs
- IDictionary<String,Object>
El diccionario de parámetros de entrada para el flujo de trabajo, ordenados por nombre de argumento.
Devoluciones
Diccionario de los valores OutArgument e InOutArgument de la actividad raíz ordenados por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el siguiente ejemplo se invoca un flujo de trabajo formado por una sola actividad Divide
que tiene dos argumentos de entrada y dos argumentos de salida. Cuando se invoca el flujo de trabajo, se pasa el diccionario de arguments
que contiene los valores de cada argumento de entrada, ordenados por nombre de argumento. Cuando la llamada a Invoke
devuelve resultados, cada uno de los argumentos de salida se devuelve en el diccionario outputs
, ordenados por nombre de argumento.
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"]);
Si el flujo de trabajo deriva de ActivityWithResult, como CodeActivity<TResult>
o Activity<TResult>
, y hay argumentos de salida además del argumento de salida bien definido Result , se debe usar una sobrecarga no genérica de Invoke
, como esta, para recuperar los argumentos adicionales. Para ello, la definición de flujo de trabajo pasada a Invoke
debe ser de tipo Activity. En este ejemplo, la Divide
actividad deriva de CodeActivity<int>
, pero se declara como Activity para que se use esta sobrecarga de Invoke
, que devuelve un diccionario de argumentos en lugar de un único valor devuelto.
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"]);
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las sobrecargas Invoke que toman una estructura TimeSpan.
Se aplica a
Invoke(IDictionary<String,Object>, TimeSpan)
Invoca la actividad pasada al constructor WorkflowInvoker(Activity) sincrónicamente con la interfaz IDictionary<TKey,TValue> de parámetros de entrada y el intervalo de tiempo de espera especificados.
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)
Parámetros
- inputs
- IDictionary<String,Object>
El diccionario de parámetros de entrada para el flujo de trabajo, ordenados por nombre de argumento.
- timeout
- TimeSpan
Intervalo de tiempo en el que se debe completar el flujo de trabajo antes de quedar anulado y de que se produzca una excepción TimeoutException.
Devoluciones
Diccionario de los valores OutArgument e InOutArgument de la actividad raíz ordenados por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el siguiente ejemplo se invoca un flujo de trabajo que contiene dos actividades de la clase WriteLine y una actividad de la clase Delay configurada con una propiedad Duration de un minuto. Este flujo de trabajo se invoca dos veces; la primera vez con un intervalo de tiempo de espera de dos minutos y la segunda con un intervalo de tiempo de espera de 30 segundos. El primer flujo de trabajo se completa correctamente, pero el segundo no y se produce una excepción TimeoutException, mostrándose además el siguiente mensaje.
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);
}
Para obtener un ejemplo de uso Invoke
con argumentos de entrada y salida, consulte la sobrecarga de Invoke con los mismos parámetros que esta sobrecarga sin el intervalo de tiempo de espera.
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Si el flujo de trabajo no se completa dentro del intervalo de tiempo de espera especificado, se anula el flujo de trabajo y se produce una excepción TimeoutException.
Nota
La excepción TimeoutException solo se produce si se agota el tiempo de espera y el flujo de trabajo queda inactivo durante la ejecución. Un flujo de trabajo que tarda en completarse más tiempo que el especificado por el intervalo de tiempo de espera se completa correctamente si el flujo de trabajo no queda inactivo.
Se aplica a
Invoke(IDictionary<String,Object>)
Invoca la actividad pasada al constructor WorkflowInvoker(Activity) sincrónicamente con la interfaz IDictionary<TKey,TValue> especificada de parámetros de entrada.
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)
Parámetros
- inputs
- IDictionary<String,Object>
El diccionario de parámetros de entrada para el flujo de trabajo, ordenados por nombre de argumento.
Devoluciones
Diccionario de los valores OutArgument e InOutArgument de la actividad raíz ordenados por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el siguiente ejemplo se invoca un flujo de trabajo formado por una sola actividad Divide
que tiene dos argumentos de entrada y dos argumentos de salida. Cuando se invoca el flujo de trabajo, se pasa el diccionario de arguments
que contiene los valores de cada argumento de entrada, ordenados por nombre de argumento. Cuando la llamada a Invoke
devuelve resultados, cada uno de los argumentos de salida se devuelve en el diccionario outputs
, ordenados por nombre de argumento.
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"]);
Si el flujo de trabajo deriva de ActivityWithResult, como CodeActivity<TResult>
o Activity<TResult>
, y hay argumentos de salida además del argumento de salida bien definido Result , se debe usar una sobrecarga no genérica de Invoke
, como esta, para recuperar los argumentos adicionales. Para ello, la definición de flujo de trabajo pasada al WorkflowInvoker
constructor debe ser de tipo Activity. En este ejemplo, la Divide
actividad deriva de CodeActivity<int>
, pero se declara como Activity para que se use esta sobrecarga de Invoke
, que devuelve un diccionario de argumentos en lugar de un único valor devuelto.
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"]);
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las sobrecargas Invoke que toman una estructura TimeSpan.
Se aplica a
Invoke(Activity)
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo especificada.
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)
Parámetros
- workflow
- Activity
La definición del flujo de trabajo que se va a invocar.
Devoluciones
Diccionario de los valores OutArgument e InOutArgument de la actividad raíz ordenados por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el siguiente ejemplo se invoca un flujo de trabajo formado por una sola actividad DiceRoll
. La actividad DiceRoll
tiene dos argumentos de salida que representan los resultados de la operación de tirar los dados. Cuando la llamada al método Invoke
devuelve resultados, cada uno de los argumentos de salida se devuelve en el diccionario de salidas, ordenados por nombre de argumento.
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"]);
Si la actividad raíz del flujo de trabajo no tiene argumentos de salida o no los necesita el host, se pueden omitir. En el siguiente ejemplo se invoca un flujo de trabajo formado por una sola actividad de la clase WriteLine que no tiene argumentos de salida.
Activity wf = new WriteLine
{
Text = "Hello World."
};
WorkflowInvoker.Invoke(wf);
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las sobrecargas Invoke que toman una estructura TimeSpan.
Se aplica a
Invoke()
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo pasada al constructor 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)
Devoluciones
Diccionario de los valores OutArgument e InOutArgument de la actividad raíz ordenados por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el siguiente ejemplo se invoca un flujo de trabajo formado por una sola actividad DiceRoll
. La actividad DiceRoll
tiene dos argumentos de salida que representan los resultados de la operación de tirar los dados. Cuando la llamada al método Invoke
devuelve resultados, cada uno de los argumentos de salida se devuelve en el diccionario de salidas, ordenados por nombre de argumento. El flujo de trabajo se invoca dos veces mediante la definición de flujo de trabajo que se pasa al WorkflowInvoker
constructor.
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"]);
Si la actividad raíz del flujo de trabajo no tiene argumentos de salida o no los necesita el host, se pueden omitir. En el siguiente ejemplo se invoca un flujo de trabajo formado por una sola actividad de la clase WriteLine que no tiene argumentos de salida.
Activity wf = new WriteLine
{
Text = "Hello World."
};
WorkflowInvoker invoker = new WorkflowInvoker(wf);
invoker.Invoke();
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las sobrecargas Invoke que toman una estructura TimeSpan.
Se aplica a
Invoke(TimeSpan)
Invoca un flujo de trabajo sincrónicamente con el intervalo de tiempo de espera especificado.
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)
Parámetros
- timeout
- TimeSpan
Intervalo de tiempo en el que se debe completar el flujo de trabajo antes de quedar anulado y de que se produzca una excepción TimeoutException.
Devoluciones
Diccionario de los valores OutArgument e InOutArgument de la actividad raíz ordenados por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el siguiente ejemplo se invoca un flujo de trabajo que contiene dos actividades de la clase WriteLine y una actividad de la clase Delay configurada con una propiedad Duration de un minuto. Este flujo de trabajo se invoca dos veces; la primera vez con un intervalo de tiempo de espera de dos minutos y la segunda con un intervalo de tiempo de espera de 30 segundos. El primer flujo de trabajo se completa correctamente, pero el segundo no y se produce una excepción TimeoutException, mostrándose además el siguiente mensaje.
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);
}
Para obtener un ejemplo del uso Invoke
con argumentos de salida, consulte la sobrecarga de Invoke con los mismos parámetros que esta sobrecarga sin el intervalo de tiempo de espera.
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Si el flujo de trabajo no se completa dentro del intervalo de tiempo de espera especificado, se anula el flujo de trabajo y se produce una excepción TimeoutException.
Nota
La excepción TimeoutException solo se produce si se agota el tiempo de espera y el flujo de trabajo queda inactivo durante la ejecución. Un flujo de trabajo que tarda en completarse más tiempo que el especificado por el intervalo de tiempo de espera se completa correctamente si el flujo de trabajo no queda inactivo.
Se aplica a
Invoke<TResult>(Activity<TResult>)
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo pasada al constructor 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
Parámetros de tipo
- TResult
El tipo del flujo de trabajo.
Parámetros
- workflow
- Activity<TResult>
La definición del flujo de trabajo que se va a invocar. La definición del flujo de trabajo debe derivarse de la clase ActivityWithResult.
Devoluciones
Valor de tipo TResult que tiene el resultado de la ejecución de la actividad.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que consta de una sola Add
actividad que tiene dos argumentos de entrada y, dado que se deriva de CodeActivity<int>
él, tiene un argumento de salida bien definido Result . Cuando se invoca el flujo de trabajo, se pasa el diccionario de arguments
que contiene los valores de cada argumento de entrada, ordenados por nombre de argumento. Cuando se devuelve la llamada a Invoke
, se devuelve el valor del Result argumento 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);
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las sobrecargas Invoke que toman una estructura TimeSpan.
Se aplica a
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>)
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo y la interfaz IDictionary<TKey,TValue> de parámetros de entrada especificados.
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
Parámetros de tipo
- TResult
El tipo del flujo de trabajo.
Parámetros
- workflow
- Activity<TResult>
La definición del flujo de trabajo que se va a invocar.
- inputs
- IDictionary<String,Object>
El diccionario de parámetros de entrada para el flujo de trabajo, ordenados por nombre de argumento.
Devoluciones
Valor de tipo TResult que tiene el resultado de la ejecución de la actividad.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que consta de una sola Add
actividad que tiene dos argumentos de entrada y, dado que se deriva de CodeActivity<int>
él, tiene un argumento de salida bien definido Result . Cuando se invoca el flujo de trabajo, se pasa el diccionario de arguments
que contiene los valores de cada argumento de entrada, ordenados por nombre de argumento. Cuando se devuelve la llamada a Invoke
, se devuelve el valor del Result argumento 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);
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las sobrecargas Invoke que toman una estructura TimeSpan.
Nota
La excepción TimeoutException solo se produce si se agota el tiempo de espera y el flujo de trabajo queda inactivo durante la ejecución. Un flujo de trabajo que tarda en completarse más tiempo que el especificado por el intervalo de tiempo de espera se completa correctamente si el flujo de trabajo no queda inactivo.
Se aplica a
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan)
Invoca un flujo de trabajo sincrónicamente usando la definición de flujo de trabajo, la interfaz IDictionary<TKey,TValue> de parámetros de entrada y el intervalo de tiempo de espera especificados.
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
Parámetros de tipo
- TResult
El tipo del flujo de trabajo.
Parámetros
- workflow
- Activity<TResult>
La definición del flujo de trabajo que se va a invocar.
- inputs
- IDictionary<String,Object>
El diccionario de parámetros de entrada para el flujo de trabajo, ordenados por nombre de argumento.
- timeout
- TimeSpan
Intervalo de tiempo en el que se debe completar el flujo de trabajo antes de quedar anulado y de que se produzca una excepción TimeoutException.
Devoluciones
Valor de tipo TResult que tiene el resultado de la ejecución de la actividad.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que consta de una sola Add
actividad que tiene dos argumentos de entrada y, dado que se deriva de CodeActivity<int>
él, tiene un argumento de salida bien definido Result . Cuando se invoca el flujo de trabajo, se pasa el diccionario de arguments
que contiene los valores de cada argumento de entrada, ordenados por nombre de argumento. Cuando se devuelve la llamada a Invoke
, se devuelve el valor del Result argumento 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);
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Si el flujo de trabajo no se completa dentro del intervalo de tiempo de espera especificado, se anula el flujo de trabajo y se produce una excepción TimeoutException.
Nota
La excepción TimeoutException solo se produce si se agota el tiempo de espera y el flujo de trabajo queda inactivo durante la ejecución. Un flujo de trabajo que tarda en completarse más tiempo que el especificado por el intervalo de tiempo de espera se completa correctamente si el flujo de trabajo no queda inactivo.
Se aplica a
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan)
Invoca un flujo de trabajo sincrónicamente mediante la definición de flujo de trabajo, la interfaz IDictionary<TKey,TValue> de parámetros de entrada, la interfaz IDictionary<TKey,TValue> de parámetros de salida adicionales y el intervalo de tiempo de espera especificados.
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
Parámetros de tipo
- TResult
El tipo del flujo de trabajo.
Parámetros
- workflow
- Activity<TResult>
La definición del flujo de trabajo que se va a invocar.
- inputs
- IDictionary<String,Object>
El diccionario de parámetros de entrada para el flujo de trabajo, ordenados por nombre de argumento.
- additionalOutputs
- IDictionary<String,Object>
Diccionario de parámetros de salida del flujo de trabajo adicionales, organizados por nombre de argumento.
- timeout
- TimeSpan
Intervalo de tiempo en el que se debe completar el flujo de trabajo antes de quedar anulado y de que se produzca una excepción TimeoutException.
Devoluciones
Valor de tipo TResult que tiene el resultado de la ejecución de la actividad.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que consta de una sola Add
actividad que tiene dos argumentos de entrada y, dado que se deriva de CodeActivity<int>
él, tiene un argumento de salida bien definido Result . Cuando se invoca el flujo de trabajo, se pasa el diccionario de arguments
que contiene los valores de cada argumento de entrada, ordenados por nombre de argumento. Cuando se devuelve la llamada a Invoke
, se devuelve el valor del Result argumento 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);
Comentarios
Este método se bloquea hasta que se ha completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se realiza en el subproceso que lo invoca. Si el flujo de trabajo no se completa dentro del intervalo de tiempo de espera especificado, se anula el flujo de trabajo y se produce una excepción TimeoutException.
Nota
La excepción TimeoutException solo se produce si se agota el tiempo de espera y el flujo de trabajo queda inactivo durante la ejecución. Un flujo de trabajo que tarda en completarse más tiempo que el especificado por el intervalo de tiempo de espera se completa correctamente si el flujo de trabajo no queda inactivo.