Tengo un proyecto Visual Studio 2008 C# .NET 3.5 donde una clase escucha una invocación de evento de otra clase que es multiproceso. Necesito asegurarme de que mi evento solo permita el acceso simultáneo a un máximo de 10 hilos. El undécimo hilo debe bloquearse hasta uno de los 10 finales.Una función que solo permite N hilos concurrentes
myobj.SomeEvent += OnSomeEvent;
private void OnSomeEvent(object sender, MyEventArgs args)
{
// allow up to 10 threads simultaneous access. Block the 11th thread.
using (SomeThreadLock lock = new SomeThreadLock(10))
{
DoUsefulThings(args.foo);
}
}
no tengo control sobre la otra clase MyObj
, así que no puedo poner en práctica un conjunto de subprocesos allí.
¿Cuál es la mejor manera de implementar esto?
Gracias, PaulH
+1 para señalar que debe salir del semáforo en el bloque 'finally' de un try/catch. Esto es algo importante: en caso de que su código arroje una excepción, quiere asegurarse de que se cierre el semáforo. –