¿Varios hilos esperando en un evento?

Lo que (creo) que quiero es el equivalente de unaAutoResetEvent que varios subprocesos pueden esperar, todos se reanudarán cuando esté configurado.

Sé que esto se puede lograr teniendo unaAutoResetEvent por hilo y configurar cada uno de ellos, pero ¿hay alguna manera más fácil? ¿Una forma que no depende de las matrices de controladores de eventos?

Efectivamente, lo que (creo) me gustaría es poder hacer esto:

private volatile string state;
private MultiEventHandle stateChanged = new MultiEventHandle();

public void WaitForBlob()
{
  while (true)
  {
    object saved = stateChanged.Current;  // some sentinel value
    if (state == "Blob") break;
    stateChanged.WaitTilNot(saved);  // wait til sentinel value != "current"
  }
}

public void SetBlob()
{
  state = "Blob";
  stateChanged.Change();  // stateChanged.Current becomes a new sentinel object
}

ie, cualquier cantidad de hilos puede llamar aWaitForBlob, y en cualquier momento (sin condiciones de carrera)SetBlob puede ser llamado por otro subproceso, y todos los subprocesos en espera detectarán el cambio inmediatamente, y lo que es más importante, sin bloqueos de giro ni subprocesos. Sueños.

Ahora creo que puedo implementar un "MultiEventHandle "con relativa facilidad. Pero mi pregunta es ... ¿hay una mejor manera? Seguramente voy a hacer esto mal, ya que debe ser un caso de uso bastante común, pero parece que no puedo encontrar una herramienta integrada para el trabajo. Me temo que podría estar inventando una rueda cuadrada aquí ..

Respuestas a la pregunta(3)

Su respuesta a la pregunta