Ho un progetto Visual Studio 2008 C# .NET 3.5 in cui una classe ascolta una chiamata di evento da un'altra classe che è multithread. Devo assicurarmi che il mio evento consenta l'accesso simultaneo a un massimo di 10 thread. L'11 ° thread dovrebbe bloccare fino a quando uno dei 10 finisce.Una funzione che consente solo N thread simultanei
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);
}
}
Non ho il controllo sopra l'altra MyObj
di classe, quindi non posso implementare un ThreadPool lì.
Qual è il modo migliore per implementarlo?
Grazie, Paulh
+1 per notare che è necessario uscire dal semaforo nel blocco 'finally' di un try/catch. Questa è una cosa importante - nel caso in cui il tuo codice generi un'eccezione, vuoi assicurarti che il semaforo sia chiuso. –