Compartir a través de


Emular la ruptura en una actividad While

Este tema es aplicable a Windows Workflow Foundation 4.

En este ejemplo se muestra cómo interrumpir el mecanismo de bucle de las siguientes actividades: DoWhile, ForEach, Whiley ParallelForEach.

Esto resulta útil porque Windows Workflow Foundation (WF) no incluye ninguna actividad para interrumpir la ejecución de estos bucles.

Situación

En el ejemplo se encuentra el primer proveedor de confianza en una lista de proveedores (instancias de la clase Vendor). Cada proveedor tiene un ID, un Name y un valor de confiabilidad numérico que determina la fiabilidad del proveedor. En el ejemplo se crea una actividad personalizada llamada FindReliableVendor que recibe dos parámetros de entrada (una lista de proveedores y un valor de confiabilidad mínimo) y devuelve el primer proveedor de la lista que coincide con los criterios proporcionados.

Interrumpir un bucle

Windows Workflow Foundation (WF) no incluye ninguna actividad para interrumpir un bucle. El ejemplo de código logra interrumpir un bucle utilizando una actividad If y diferentes variables. En el ejemplo, la actividad While se interrumpe cuando se asigna a la variable reliableVendor un valor distinto de null.

El siguiente ejemplo de código muestra cómo el ejemplo interrumpe un bucle while.

// Iterates while the “i” variable is lower than the size of the list 
// and any reliable Vendor is found.      
new While(env => i.Get(env) < this.Vendors.Get(env).Count && reliableVendor.Get(env) == null)
{
    DisplayName = "Main loop. Breaks when a reliable vendor is found",
    Body = new Sequence
    {                            
        Activities =
        {
            // This is the if used for setting the value of the break value…
            new If
            {
                DisplayName = "Check for a reliable vendor",

                //  If a vendor satisfies the reliability level…
                Condition = new InArgument<bool>(env => 
                           this.Vendors.Get(env)[i.Get(env)].Reliability > 
                           this.MinimumReliability.Get(env)),

                // then assign that vendor to the reliable vendor variable and 
                // the while condition becomes false (exit the loop).
                Then = new Assign<Vendor>
                {
                    To = reliableVendor,
                    Value = new InArgument<Vendor>(env => 
                                  this.Vendors.Get(env)[i.Get(env)])
                }
            },

            // Increment the iteration variable. 
            new Assign<int>
            {
                DisplayName = "Increment iteration variable",
                To = i,
                Value = new InArgument<int>(env => i.Get(env) + 1)
            } 
        }
    }
}

Para utilizar este ejemplo

  1. Abra el archivo de solución EmulatingBreakInWhile.sln con Visual Studio 2010.

  2. Presione F6 para compilar la solución.

  3. Presione CTRL+F5 para ejecutar la solución.

Dd807393.Important(es-es,VS.100).gif Nota:
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.

<InstallDrive>: \WF_WCF_Samples

Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de Windows Communication Foundation (WCF) y WF. Este ejemplo se encuentra en el siguiente directorio.

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Built-InActivities\EmulatingBreakInWhile