C# · Avançado · Inglês · Técnico
SemaphoreSlim
Primitiva leve de sincronização que limita quantas threads ou tasks entram numa região ao mesmo tempo. Ao contrário do lock, oferece WaitAsync e pode ser usada com await.
Onde usar
Aparece para limitar chamadas simultâneas a uma API externa ou como exclusão mútua em código async, onde lock não pode conter await. Libere sempre em um finally para não deixar o semáforo preso.
Em código
var sem = new SemaphoreSlim(3);
await sem.WaitAsync();
try { await ChamarApiAsync(); }
finally { sem.Release(); }
Task ChamarApiAsync() => Task.Delay(10);Exemplos
A SemaphoreSlim caps us at five concurrent calls.
Um SemaphoreSlim nos limita a cinco chamadas simultâneas.
Always release the SemaphoreSlim in a finally.
Sempre libere o SemaphoreSlim em um finally.
Cuidado
Não esqueça o Release depois de WaitAsync: as próximas chamadas ficam esperando para sempre.
Sinônimos
semáforo