Solución para el límite de manejador WaitHandle.WaitAll 64?

Mi aplicación genera cargas de diferentes subprocesos de pequeños trabajadores a través deThreadPool.QueueUserWorkItem que sigo a través de múltiplesManualResetEvent instancias. Yo uso elWaitHandle.WaitAll método para bloquear el cierre de mi aplicación hasta que estos hilos se hayan completado.

Sin embargo, nunca he tenido ningún problema antes, ya que mi aplicación se está cargando más, es decir, se están creando más hilos, ahora estoy comenzando a obtener esta excepción:

WaitHandles must be less than or equal to 64 - missing documentation

¿Cuál es la mejor solución alternativa a esto?

Fragmento de código

List<AutoResetEvent> events = new List<AutoResetEvent>();

// multiple instances of...
var evt = new AutoResetEvent(false);
events.Add(evt);
ThreadPool.QueueUserWorkItem(delegate
{
    // do work
    evt.Set();
});

...
WaitHandle.WaitAll(events.ToArray());

Solución alternativa

int threadCount = 0;
ManualResetEvent finished = new ManualResetEvent(false);

...
Interlocked.Increment(ref threadCount);
ThreadPool.QueueUserWorkItem(delegate
{
    try
    {
         // do work
    }
    finally
    {
        if (Interlocked.Decrement(ref threadCount) == 0)
        {
             finished.Set();
        }
    }
});

...
finished.WaitOne();

Respuestas a la pregunta(8)

Su respuesta a la pregunta