Uruchomienie metody asynchronicznie z gwarancją życia jedynie jednej jej instancji

0

Cześć.

Potrzebuje uruchomić metodę asynchronicznie. Metoda uruchamiana będzie cyklicznie. Nie chciał bym, żeby metoda działała w dwóch wątkach równolegle, tylko, żeby druga i kolejne instancje metody, gdy się zorientują, że już jakaś inna instancja pracuje po prostu zakończyły działanie. Na początku użyłem SemaphoreSlim ale on pozwala tylko czekać, aż wejdę do semafora, a nie mogę sprawdzić, czy semafor nie jest zajęty już. Teoretycznie mogę logikę zrobić tak, że uruchomi mi się n metod w n wątkach, i gdy 1 zakończy zadanie ( opróżni pewną kolejkę) to wszystkie inne się zakończą, ale tworzą mi się niepotrzebne wątki ....Wpadłem na pomysł, żeby zastosować zmienną kontekstową i jeżeli będzie ustawiona to każdy kolejny wątek od razu będzie wychodził z metody -zapewniło by mi to, że będzie żyć tylko jedna metoda. Problem w tym, że jak odczytam zmienną - operacja atomowa, i będzie nie ustawiona, to wątek ją ustawi i zacznie prace dalej, ale po odczycie a przed zapisem inny wątek też mógł ja odczytać i siłą rzeczy będzie pracować 2 wątki. Można robić licznik i inkrementować, ale to głupie. Jakie macie pomysły, żeby zapewnić, żeby metoda zakończyła działanie w momencie gdy pracuje już inna jej instancja ?? Dzięki za pomoc.

0

najpierw użyj semafora potem pogrzeb w zmiennej kontekstowej i na koniec zwolnij semafor - masz odczyt/ustawianie jako operacje atomową

0

@abrakadaber - Dzięki. Aż mi teraz głupio, bo juz takie coś się robiło nie raz. Jakaś pomroczność, ale się nie tłumaczę, powinienem od razu na to wpaść. Niemniej, jak już mamy wątek to, może są jakies fajniejsze rozwiązania, jakieś cukierki etc ? C# z tego słynie ;). Jeszcze raz, dzięki za lekkie puknięcie w potylice ;)

0

Przywołuje @topik92 . Mam powiadomienie, że coś napisal a nic nie ma ;(

1 użytkowników online, w tym zalogowanych: 0, gości: 1