Mam projekt Visual Studio 2008 C# .NET 3.5, gdzie klasa nasłuchuje wywołania zdarzenia z innej klasy, która jest wielowątkowa. Muszę się upewnić, że moje wydarzenie pozwala tylko na jednoczesny dostęp do maksymalnie 10 wątków. 11. wątek powinien zablokować się, aż jeden z 10 zakończy się.Funkcja zezwalająca tylko na N równoczesnych wątków
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);
}
}
nie mam kontroli nad drugim MyObj
klasy, więc nie mogę realizować tam puli wątków.
Jaki jest najlepszy sposób wdrożenia tego?
Dzięki PaulH
+1 dla stwierdzenia, że należy wyjść z semafora w bloku 'finally' w try/catch. To ważne rzeczy - na wypadek, gdyby kod wygenerował wyjątek, chcesz się upewnić, że semafor został zakończony. –