Блокировка семафором с 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();
            }
        }
    }

Ответы (0 шт):