Soluzione alternativa per il limite di handle WaitHandle.WaitAll 64?

La mia applicazione genera un sacco di diversi thread di piccoli operatori tramite ThreadPool.QueueUserWorkItem cui tengo traccia tramite più istanze di ManualResetEvent . Uso il metodo WaitHandle.WaitAll per bloccare la chiusura della mia applicazione fino al completamento di questi thread.

Non ho mai avuto problemi prima, tuttavia, dato che la mia applicazione sta subendo un carico maggiore, vale a dire più thread creati, ora sto iniziando a ottenere questa eccezione:

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

Qual è la migliore soluzione alternativa a questo?

Snippet di codice

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

Soluzione

 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();