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 forma sincrónica y devuelve un diccionario de los valores y OutArgument de InOutArgument la actividad raíz con clave por nombre de argumento que representan las salidas del flujo de trabajo.
Sobrecargas
| Nombre | Description |
|---|---|
| Invoke(Activity, IDictionary<String,Object>, TimeSpan) |
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo especificada, IDictionary<TKey,TValue> los parámetros de entrada y el intervalo de tiempo de espera. |
| Invoke(Activity, TimeSpan) |
Invoca un flujo de trabajo de forma sincrónica mediante 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 de forma sincrónica mediante la definición de flujo de trabajo especificada y IDictionary<TKey,TValue> los parámetros de entrada. |
| Invoke(IDictionary<String,Object>, TimeSpan) |
Invoca la actividad pasada al WorkflowInvoker(Activity) constructor de forma sincrónica con el especificado IDictionary<TKey,TValue> de parámetros de entrada y el intervalo de tiempo de espera especificado. |
| Invoke(IDictionary<String,Object>) |
Invoca la actividad que se pasa al WorkflowInvoker(Activity) constructor de forma sincrónica con el especificado IDictionary<TKey,TValue> de parámetros de entrada. |
| Invoke(Activity) |
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo especificada. |
| Invoke() |
Invoca un flujo de trabajo de forma sincrónica mediante la definición de WorkflowInvoker(Activity) flujo de trabajo que se pasa al constructor. |
| Invoke(TimeSpan) |
Invoca un flujo de trabajo de forma sincrónica 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 WorkflowInvoker(Activity) flujo de trabajo que se pasa al constructor. |
| Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>) |
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo especificada y IDictionary<TKey,TValue> los parámetros de entrada. |
| Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan) |
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo especificada, IDictionary<TKey,TValue> los parámetros de entrada y el intervalo de tiempo de espera. |
| Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan) |
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo especificada, IDictionary<TKey,TValue> los parámetros de entrada, IDictionary<TKey,TValue> los parámetros de salida adicionales y el intervalo de tiempo de espera. |
Comentarios
Este método se bloquea hasta que se haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las Invoke sobrecargas que toman un TimeSpan.
Invoke(Activity, IDictionary<String,Object>, TimeSpan)
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo especificada, IDictionary<TKey,TValue> los parámetros de entrada y el intervalo de tiempo de espera.
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
Definición de flujo de trabajo del flujo de trabajo que se va a invocar.
- inputs
- IDictionary<String,Object>
Diccionario de parámetros de entrada para el flujo de trabajo, con clave por nombre de argumento.
- timeout
- TimeSpan
Intervalo en el que el flujo de trabajo debe completarse antes de anularlo y se produce una TimeoutException excepción .
Devoluciones
Diccionario de los valores y OutArgument de la actividad InOutArgument raíz con clave por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que contiene dos WriteLine actividades y una Delay actividad configurada con un Duration 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 TimeoutException excepción .
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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. 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 TimeoutException excepción .
Note
Solo se lanza TimeoutException si transcurre el intervalo de tiempo de espera y el flujo de trabajo se vuelve inactivo durante la ejecución. Un flujo de trabajo que tarda más que el intervalo de tiempo de espera especificado en completarse terminará correctamente si no se vuelve inactivo.
Se aplica a
Invoke(Activity, TimeSpan)
Invoca un flujo de trabajo de forma sincrónica mediante 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
Definición de flujo de trabajo del flujo de trabajo que se va a invocar.
- timeout
- TimeSpan
Intervalo en el que el flujo de trabajo debe completarse antes de anularlo y se produce una TimeoutException excepción .
Devoluciones
Diccionario de los valores y OutArgument de la actividad InOutArgument raíz con clave por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que contiene dos WriteLine actividades y una Delay actividad configurada con un Duration 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 TimeoutException excepción .
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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. 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 TimeoutException excepción .
Note
Solo se lanza TimeoutException si transcurre el intervalo de tiempo de espera y el flujo de trabajo se vuelve inactivo durante la ejecución. Un flujo de trabajo que tarda más que el intervalo de tiempo de espera especificado en completarse terminará correctamente si no se vuelve inactivo.
Se aplica a
Invoke(Activity, IDictionary<String,Object>)
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo especificada y IDictionary<TKey,TValue> los parámetros de entrada.
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
Definición de flujo de trabajo del flujo de trabajo que se va a invocar.
- inputs
- IDictionary<String,Object>
Diccionario de parámetros de entrada para el flujo de trabajo, con clave por nombre de argumento.
Devoluciones
Diccionario de los valores y OutArgument de la actividad InOutArgument raíz con clave por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que consta de una sola Divide actividad que tiene dos argumentos de entrada y dos argumentos de salida. Cuando se invoca el flujo de trabajo, se pasa el arguments diccionario que contiene los valores de cada argumento de entrada, con clave 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 se 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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las Invoke sobrecargas que toman un TimeSpan.
Se aplica a
Invoke(IDictionary<String,Object>, TimeSpan)
Invoca la actividad pasada al WorkflowInvoker(Activity) constructor de forma sincrónica con el especificado IDictionary<TKey,TValue> de parámetros de entrada y el intervalo de tiempo de espera especificado.
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>
Diccionario de parámetros de entrada para el flujo de trabajo, con clave por nombre de argumento.
- timeout
- TimeSpan
Intervalo en el que el flujo de trabajo debe completarse antes de anularlo y se produce una TimeoutException excepción .
Devoluciones
Diccionario de los valores y OutArgument de la actividad InOutArgument raíz con clave por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que contiene dos WriteLine actividades y una Delay actividad configurada con un Duration 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 inicia y TimeoutException se muestra el mensaje siguiente.
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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. 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 TimeoutException excepción .
Note
Solo se lanza TimeoutException si transcurre el intervalo de tiempo de espera y el flujo de trabajo se vuelve inactivo durante la ejecución. Un flujo de trabajo que tarda más que el intervalo de tiempo de espera especificado en completarse terminará correctamente si no se vuelve inactivo.
Se aplica a
Invoke(IDictionary<String,Object>)
Invoca la actividad que se pasa al WorkflowInvoker(Activity) constructor de forma sincrónica con el especificado IDictionary<TKey,TValue> 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>
Diccionario de parámetros de entrada para el flujo de trabajo, con clave por nombre de argumento.
Devoluciones
Diccionario de los valores y OutArgument de la actividad InOutArgument raíz con clave por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que consta de una sola Divide actividad que tiene dos argumentos de entrada y dos argumentos de salida. Cuando se invoca el flujo de trabajo, se pasa el arguments diccionario que contiene los valores de cada argumento de entrada, con clave 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 se 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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las Invoke sobrecargas que toman un TimeSpan.
Se aplica a
Invoke(Activity)
Invoca un flujo de trabajo de forma sincrónica mediante 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
Definición de flujo de trabajo del flujo de trabajo que se va a invocar.
Devoluciones
Diccionario de los valores y OutArgument de la actividad InOutArgument raíz con clave por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que consta de una sola DiceRoll actividad. La DiceRoll actividad tiene dos argumentos de salida que representan los resultados de la operación de lanzamiento de dados. Cuando se devuelve la llamada a Invoke , cada argumento de salida se devuelve en el diccionario de salidas, con clave 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 son necesarios para el host, se pueden ignorar. En el ejemplo siguiente se invoca un flujo de trabajo que consta de una sola WriteLine actividad que no tiene ningún argumento de salida.
Activity wf = new WriteLine
{
Text = "Hello World."
};
WorkflowInvoker.Invoke(wf);
Comentarios
Este método se bloquea hasta que se haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las Invoke sobrecargas que toman un TimeSpan.
Se aplica a
Invoke()
Invoca un flujo de trabajo de forma sincrónica mediante la definición de WorkflowInvoker(Activity) flujo de trabajo que se pasa al constructor.
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 y OutArgument de la actividad InOutArgument raíz con clave por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que consta de una sola DiceRoll actividad. La DiceRoll actividad tiene dos argumentos de salida que representan los resultados de la operación de lanzamiento de dados. Cuando se devuelve la llamada a Invoke , cada argumento de salida se devuelve en el diccionario de salidas, con clave por nombre de argumento. El flujo de trabajo se invoca dos veces mediante la definición de WorkflowInvoker flujo de trabajo que se pasa al 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 son necesarios para el host, se pueden ignorar. En el ejemplo siguiente se invoca un flujo de trabajo que consta de una sola WriteLine actividad que no tiene ningún argumento 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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las Invoke sobrecargas que toman un TimeSpan.
Se aplica a
Invoke(TimeSpan)
Invoca un flujo de trabajo de forma sincrónica 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 en el que el flujo de trabajo debe completarse antes de anularlo y se produce una TimeoutException excepción .
Devoluciones
Diccionario de los valores y OutArgument de la actividad InOutArgument raíz con clave por nombre de argumento que representan las salidas del flujo de trabajo.
Ejemplos
En el ejemplo siguiente se invoca un flujo de trabajo que contiene dos WriteLine actividades y una Delay actividad configurada con un Duration 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 inicia y TimeoutException se muestra el mensaje siguiente.
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 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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. 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 TimeoutException excepción .
Note
Solo se lanza TimeoutException si transcurre el intervalo de tiempo de espera y el flujo de trabajo se vuelve inactivo durante la ejecución. Un flujo de trabajo que tarda más que el intervalo de tiempo de espera especificado en completarse terminará correctamente si no se vuelve inactivo.
Se aplica a
Invoke<TResult>(Activity<TResult>)
Invoca un flujo de trabajo de forma sincrónica mediante la definición de WorkflowInvoker(Activity) flujo de trabajo que se pasa al constructor.
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
Tipo del flujo de trabajo.
Parámetros
- workflow
- Activity<TResult>
Definición de flujo de trabajo del flujo de trabajo que se va a invocar. La definición de flujo de trabajo debe derivarse de ActivityWithResult.
Devoluciones
Valor de tipo TResult con 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 arguments diccionario que contiene los valores de cada argumento de entrada, con clave por nombre de argumento. Cuando se devuelve la llamada a Invoke , se devuelve el valor del Result argumento de salida.
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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las Invoke sobrecargas que toman un TimeSpan.
Se aplica a
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>)
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo especificada y IDictionary<TKey,TValue> los parámetros de entrada.
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
Tipo del flujo de trabajo.
Parámetros
- workflow
- Activity<TResult>
Definición de flujo de trabajo del flujo de trabajo que se va a invocar.
- inputs
- IDictionary<String,Object>
Diccionario de parámetros de entrada para el flujo de trabajo, con clave por nombre de argumento.
Devoluciones
Valor de tipo TResult con 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 arguments diccionario que contiene los valores de cada argumento de entrada, con clave por nombre de argumento. Cuando se devuelve la llamada a Invoke , se devuelve el valor del Result argumento de salida.
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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. Para configurar un intervalo de tiempo de espera en el que se debe completar el flujo de trabajo, use una de las Invoke sobrecargas que toman un TimeSpan.
Note
Solo se lanza TimeoutException si transcurre el intervalo de tiempo de espera y el flujo de trabajo se vuelve inactivo durante la ejecución. Un flujo de trabajo que tarda más tiempo que el intervalo de tiempo de espera especificado en completarse, se completa correctamente si el flujo de trabajo no se vuelve inactivo.
Se aplica a
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan)
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo especificada, IDictionary<TKey,TValue> los parámetros de entrada y el intervalo de tiempo de espera.
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
Tipo del flujo de trabajo.
Parámetros
- workflow
- Activity<TResult>
Definición de flujo de trabajo del flujo de trabajo que se va a invocar.
- inputs
- IDictionary<String,Object>
Diccionario de parámetros de entrada para el flujo de trabajo, con clave por nombre de argumento.
- timeout
- TimeSpan
Intervalo en el que el flujo de trabajo debe completarse antes de anularlo y se produce una TimeoutException excepción .
Devoluciones
Valor de tipo TResult con 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 arguments diccionario que contiene los valores de cada argumento de entrada, con clave por nombre de argumento. Cuando se devuelve la llamada a Invoke , se devuelve el valor del Result argumento de salida.
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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. 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 TimeoutException excepción .
Note
Solo se lanza TimeoutException si transcurre el intervalo de tiempo de espera y el flujo de trabajo se vuelve inactivo durante la ejecución. Un flujo de trabajo que tarda más tiempo que el intervalo de tiempo de espera especificado en completarse, se completa correctamente si el flujo de trabajo no se vuelve inactivo.
Se aplica a
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan)
Invoca un flujo de trabajo de forma sincrónica mediante la definición de flujo de trabajo especificada, IDictionary<TKey,TValue> los parámetros de entrada, IDictionary<TKey,TValue> los parámetros de salida adicionales y el intervalo de tiempo de espera.
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
Tipo del flujo de trabajo.
Parámetros
- workflow
- Activity<TResult>
Definición de flujo de trabajo del flujo de trabajo que se va a invocar.
- inputs
- IDictionary<String,Object>
Diccionario de parámetros de entrada para el flujo de trabajo, con clave por nombre de argumento.
- additionalOutputs
- IDictionary<String,Object>
Diccionario de parámetros de salida adicionales del flujo de trabajo, con clave por nombre de argumento.
- timeout
- TimeSpan
Intervalo en el que el flujo de trabajo debe completarse antes de anularlo y se produce una TimeoutException excepción .
Devoluciones
Valor de tipo TResult con 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 arguments diccionario que contiene los valores de cada argumento de entrada, con clave por nombre de argumento. Cuando se devuelve la llamada a Invoke , se devuelve el valor del Result argumento de salida.
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 haya completado el flujo de trabajo, incluido el tiempo de inactividad. Se garantiza que toda la ejecución del flujo de trabajo se ejecute en el subproceso invocando. 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 TimeoutException excepción .
Note
Solo se lanza TimeoutException si transcurre el intervalo de tiempo de espera y el flujo de trabajo se vuelve inactivo durante la ejecución. Un flujo de trabajo que tarda más tiempo que el intervalo de tiempo de espera especificado en completarse, se completa correctamente si el flujo de trabajo no se vuelve inactivo.