Традиционные механизмы блокировки разработаны для синхронного кода на основе потоков. Они работают путём блокирования исполняющегося потока до момента, пока лок не будет освобождён. Такой подход фундаментально конфликтует с принципами асинхронного программирования, которые нацелены на максимизацию эффективности за счёт освобождения потоков для обработки других задач.
Риск дедлока
Нагрузка на планировщик потоков
Потеря преимуществ async
awaitить операции без удержания тредаВместо традиционных локов асинхронный код должен использовать async-совместимые примитивы синхронизации, такие как:
SemaphoreSlimReaderWriterLockSlim (с осторожностью)Эти альтернативы позволяют тредам освобождаться и переиспользоваться пока операции завершаются, сохраняя при этом все преимущества асинхронного программирования.
Традиционные lock statements блокируют выполняющийся поток до момента освобождения блокировки, что прямо противоречит неблокирующей модели выполнения, для которой разработано асинхронное программирование.
Новый — ещё не проверен сообществом
Вы