Het gebruik van de SemaphoreSlim class in C#

Geschreven door: op zaterdag 28 maart 2020

Leestijd:

Webapplicaties kunnen meerdere calls vanuit meerdere plekken verwerken zonder dat deze requests op elkaar moeten wachten. Maar soms heb je te maken met een usecase waar je helemaal niet wilt dat functionaliteit meerdere calls kan verwerken tegelijkertijd. Denk hier bijvoorbeeld aan functionaliteit die grote bedragen verwerkt of een functie die veel resources kost. Hier kun je gebruik maken van de SemaphoreSlim class welke je in staat stelt om controle uit te voeren op wie er wanneer toegang heeft tot bepaalde resources.

Het kan soms voorkomen dat binnen je applicatie een bepaalde functie vrij veel resources kost om te kunnen draaien, bijv. qua geheugengebruik of qua CPU gebruik. Of je kunt te maken hebben met een functionaliteit die met bijv. geldstromen werkt waarbij je niet wilt dat daar requests mogelijk dubbel verstuurd worden of dat daar teveel requests tegelijk verstuurd worden. Het kan in deze gevallen handig zijn om de toegang tot deze functionaliteiten te beperken om te zorgen dat alles goed blijft werken. De toegang tot een functionaliteit beperken kan op verschillende manieren aangepakt worden. Je kunt gebruik maken van een static variabele die je in de controller zet. Deze variabele zet je zodra de functie bezig is en reset je als de functie klaar is. Het nadeel hieraan is dat requests die gedaan worden terwijl de code bezig is op deze manier verloren gaan. Als iemand de functie toch wilt aanroepen dan moet het request nogmaals gedaan worden, deze worden niet bewaard en alsnog uitgevoerd als de functie klaaris. Wat wel aan deze eisen voldoet, is het gebruik van de SemaphoreSlim class.

Om de toegang tot de functionaliteit te beheren, kan je gebruik maken van de SemaphoreSlim class. Met deze class kun je het aantal threads beperken dat tegelijkertijd toegang heeft tot bepaalde resources. In andere woorden, deze class wacht tot de functie is uitgevoerd totdat het toegang verleent naar de functie aan de volgende thread. SemaphoreSlim is een lichtere versie van de Semaphore class. Je kunt daarnaast opgeven hoeveel threads er tegelijkertijd toegang hebben tot een functie. Wordt dit aantal overschreven, dan worden deze threads ‘in de wacht gezet’ totdat de vorige thread klaar is.

Een voorbeeld van het gebruik van de SemaphoreSlim class:

semaphoreslim voorbeeld

Bij het initialiseren van de class geef je aan hoeveel threads gelijktijdig gebruik mogen maken van de functie die de SemaphoreSlim class afschermt. In bovenstaand voorbeeld is dat dus 1 thread. Daarna vertel je de code met Wait() dat als het maximum aantal theads is bereikt, de code hier wacht totdat de functie klaar is en er weer toegang is tot de class. Met Release() geef je weer een plek vrij en kan de volgende thread gebruik maken van de functie. Als je dit in een finally zet dan weet je zeker de er een plek vrijgegeven wordt, zelfs als een fout optreedt en de code hier dus nooit vast staat.

Dit was een introducatie tot de SemaphoreSlim class, mocht je meer willen lezen dan kan dat hier:

https://docs.microsoft.com/en-us/dotnet/standard/threading/semaphore-and-semaphoreslim


Andere blogartikelen

  • Interfaces om mee te testen

    Geschreven door: op zondag 24 mei 2020

    Interfaces om te testenIn object geörienteerde programmeertalen kan je gebruikmaken van interfaces. Interfaces zijn een hulpmiddel voor ontwikkelaars. Ze geven de ontwikkelaar aan wat een bepaalde kl ...

    Bekijk het artikel »
  • Het gebruik van await in C#

    Geschreven door: op zaterdag 28 maart 2020

    Binnen applicaties kunnen soms functies voorkomen die lang nodig hebben om te voltooien. Denk bijvoorbeeld aan een call naar een API van een derde partij die veel data teruggeeft die verwerkt moet wor ...

    Bekijk het artikel »
  • SQL en het gebruik van JOIN

    Geschreven door: op zaterdag 28 maart 2020

    Binnen SQL heb je verschillende manieren om tabellen met elkaar te koppelen om zo data uit beide tabellen terug te krijgen in de resultaten. Maar wat houdt elk van deze joins in?Verschillende typenE ...

    Bekijk het artikel »
Bel 072 5345 888
Meer dan 40 bedrijven vertrouwen op ons
Onze Middelen en Technologieën
microsoft silver partner
Adobe partner
fd-gazellen-2018.jpg
Google analytics
partners-logo.jpg
Op de hoogte blijven?

Meld u aan voor de gratis nieuwsbrief om op de hoogte te blijven van onze activiteiten