Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original.
Traducción
Original

CountdownEvent (Clase)

Representa una primitiva de sincronización que está señalada cuando su recuento alcanza el valor cero.

System.Object
  System.Threading.CountdownEvent

Espacio de nombres:  System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class CountdownEvent : IDisposable

El tipo CountdownEvent expone los siguientes miembros.

  NombreDescripción
Método públicoCountdownEventInicializa una nueva instancia de la clase CountdownEvent con el recuento especificado.
Arriba

  NombreDescripción
Propiedad públicaCurrentCountObtiene el número de señales restantes necesario para establecer el evento.
Propiedad públicaInitialCountObtiene los números de señales que se necesitan inicialmente para establecer el evento.
Propiedad públicaIsSetDetermina si se establece el evento.
Propiedad públicaWaitHandleObtiene un objeto WaitHandle que se usa para esperar a que se establezca el evento.
Arriba

  NombreDescripción
Método públicoAddCount()Incrementa en uno el recuento actual de CountdownEvent.
Método públicoAddCount(Int32)Incrementa en un valor especificado el recuento actual de CountdownEvent.
Método públicoDispose()Libera todos los recursos usados por la instancia actual de la clase CountdownEvent.
Método protegidoDispose(Boolean)Cuando se reemplaza en una clase derivada, libera los recursos no administrados utilizados por CountdownEvent y, de forma opcional, libera los recursos administrados.
Método públicoEquals(Object)Determina si el objeto Object especificado es igual al objeto Object actual. (Se hereda de Object).
Método protegidoFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoGetHashCodeActúa como función hash para un tipo concreto. (Se hereda de Object).
Método públicoGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método protegidoMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoReset()Restablece CurrentCount en el valor de InitialCount.
Método públicoReset(Int32)Restablece la propiedad InitialCount según un valor especificado.
Método públicoSignal()Registra una señal con CountdownEvent y disminuye el valor de CurrentCount.
Método públicoSignal(Int32)Registra varias señales con CountdownEvent reduciendo el valor de CurrentCount según la cantidad especificada.
Método públicoToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Método públicoTryAddCount()Intenta incrementar CurrentCount en uno.
Método públicoTryAddCount(Int32)Intenta incrementar CurrentCount en un valor especificado.
Método públicoWait()Bloquea el subproceso actual hasta que se establezca el objeto CountdownEvent.
Método públicoWait(CancellationToken)Bloquea el subproceso actual hasta que se establezca el objeto CountdownEvent, mientras se observa un token CancellationToken.
Método públicoWait(Int32)Bloquea el subproceso actual hasta que se establezca el objeto CountdownEvent, usando un entero de 32 bits con signo para medir el tiempo de espera.
Método públicoWait(TimeSpan)Bloquea el subproceso actual hasta que se establezca el objeto CountdownEvent, usando un objeto TimeSpan para medir el tiempo de espera.
Método públicoWait(Int32, CancellationToken)Bloquea el subproceso actual hasta que se establezca el objeto CountdownEvent, usando un entero de 32 bits con signo para medir el tiempo de espera, mientras se observa un token CancellationToken.
Método públicoWait(TimeSpan, CancellationToken)Bloquea el subproceso actual hasta que se establezca el objeto CountdownEvent, usando un objeto TimeSpan para medir el tiempo de espera, mientras se observa un token CancellationToken.
Arriba

NotaNota

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el siguiente valor de la propiedad Resources: Synchronization | ExternalThreading. El atributo HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician haciendo doble clic en un icono, escribiendo un comando o introduciendo una dirección URL en el explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación en SQL Server y atributos de protección de host.

.NET Framework

Compatible con: 4

.NET Framework Client Profile

Compatible con: 4

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros públicos y protegidos de CountdownEvent son seguros para subprocesos y se pueden utilizar concurrentemente desde varios subprocesos, con la excepción de Dispose, que solo se debe utilizar cuando todas las otras operaciones en CountdownEvent se han completado, y Reset, que solo se debe utilizar cuando ningún otro subproceso está teniendo acceso al evento.

Ejemplo

En el ejemplo anterior se muestra cómo utilizar CountdownEvent.


using System;
using System.Collections.Concurrent;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
class CDESample
{
    // Demonstrates:
    //      CountdownEvent construction
    //      CountdownEvent.AddCount()
    //      CountdownEvent.Signal()
    //      CountdownEvent.Wait()
    //      CountdownEvent.Wait() w/ cancellation
    //      CountdownEvent.Reset()
    //      CountdownEvent.IsSet
    //      CountdownEvent.InitialCount
    //      CountdownEvent.CurrentCount
    static void Main()
    {
        // Initialize a queue and a CountdownEvent
        ConcurrentQueue<int> queue = new ConcurrentQueue<int>(Enumerable.Range(0, 10000));
        CountdownEvent cde = new CountdownEvent(10000); // initial count = 10000

        // This is the logic for all queue consumers
        Action consumer = () =>
        {
            int local;
            // decrement CDE count once for each element consumed from queue
            while (queue.TryDequeue(out local)) cde.Signal();
        };

        // Now empty the queue with a couple of asynchronous tasks
        Task t1 = Task.Factory.StartNew(consumer);
        Task t2 = Task.Factory.StartNew(consumer);

        // And wait for queue to empty by waiting on cde
        cde.Wait(); // will return when cde count reaches 0

        Console.WriteLine("Done emptying queue.  InitialCount={0}, CurrentCount={1}, IsSet={2}",
            cde.InitialCount, cde.CurrentCount, cde.IsSet);

        // Proper form is to wait for the tasks to complete, even if you that their work
        // is done already.
        Task.WaitAll(t1, t2);

        // Resetting will cause the CountdownEvent to un-set, and resets InitialCount/CurrentCount
        // to the specified value
        cde.Reset(10);

        // AddCount will affect the CurrentCount, but not the InitialCount
        cde.AddCount(2);

        Console.WriteLine("After Reset(10), AddCount(2): InitialCount={0}, CurrentCount={1}, IsSet={2}",
            cde.InitialCount, cde.CurrentCount, cde.IsSet);

        // Now try waiting with cancellation
        CancellationTokenSource cts = new CancellationTokenSource();
        cts.Cancel(); // cancels the CancellationTokenSource
        try
        {
            cde.Wait(cts.Token);
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("cde.Wait(preCanceledToken) threw OCE, as expected");
        }

        // It's good for to release a CountdownEvent when you're done with it.
        cde.Dispose();

    }
}


Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft