Estoy usando AutoResetEvent. Solo necesito saber si es posible obtener el número de subprocesos en espera.
if (WaitHandler.Reset()) { if (WaitHandler.WaitOne(WaitMilliseconds)) { // do something after WaitHandler.Set() } }Necesito saber cuántos subprocesos están esperando actualmente en WaitOne(). ¿Y es posible limitarlos, como 10 subprocesos como máximo, todos los demás subprocesos retroceden? Si no, ¿cómo limitarlo?
No estoy seguro de si esto es útil, lo encontré en https://kmyr.dev/post/limiting-the-number-of-threads
internal sealed class ThreadManager { private readonly WaitHandle[] _syncObjects; public ThreadManager() : this(Environment.ProcessorCount) { } public ThreadManager(int maxThreads) { MaxThreads = maxThreads; _syncObjects = new WaitHandle[maxThreads]; for (var i = 0; i < maxThreads; i++) { _syncObjects[i] = new AutoResetEvent(true); } } public int MaxThreads { get; private set; } public bool StartTask(Action action, bool wait) { var timeout = wait ? Timeout.Infinite : 0; var freeIndex = WaitHandle.WaitAny(_syncObjects, timeout); if (freeIndex == WaitHandle.WaitTimeout) { return false; } ThreadPool.QueueUserWorkItem( state => { action(); ((AutoResetEvent)state).Set(); }, _syncObjects[freeIndex]); return true; } }