Блокировка семафором с await
Вот такой код как ниже видел много раз. Кто-то говорит, что это нежелательный код и писать такие блокировки с await не следует, но я так и не смог уловить и до конца разобраться в проблеме.
Пожалуйста, не могли бы Вы объяснить, почему так не следует писать? И как в таком случае сделать блокировку безопасной?
public class Sample
{
private static SemaphoreSlim _semaphoreSlim = new SemaphoreSlim(1, 1);
public async Task DoSomethingThreadSafe()
{
await _semaphoreSlim.WaitAsync();
try
{
await ThreadSafeCode();
}
finally
{
_semaphoreSlim.Release();
}
}
}