Ich habe ein Visual Studio 2008 C# .NET 3.5-Projekt, wo eine Klasse auf einen Ereignisaufruf von einer anderen Klasse, die Multithread ist, wartet. Ich muss sicherstellen, dass mein Event nur den gleichzeitigen Zugriff auf maximal 10 Threads erlaubt. Der 11. Thread sollte blockieren bis einer der 10 endet.Eine Funktion, die nur N gleichzeitige Threads erlaubt
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);
}
}
Ich habe keine Kontrolle über die andere MyObj
Klasse, so kann ich eine Thread es nicht implementieren.
Was ist der beste Weg, dies zu implementieren?
Danke, PaulH
+1 für die Feststellung, dass Sie den Semaphor im 'finally'-Block eines try/catch beenden sollten. Dies ist wichtig - falls Ihr Code eine Ausnahme auslöst, möchten Sie sicherstellen, dass der Semaphor beendet wird. –