ExpertiDict

C# · Avançado · Inglês · Técnico

SemaphoreSlim

/ˈsɛməfɔr slɪm/substantivo

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

Veja também

Todos os termos de C#