Вопрос исследует конфликт между асинхронным кодом и блокировками, а также внутреннюю работу lock.
Короткий ответ
await внутри lock может вызвать взаимоблокировку или нарушить поток выполнения. После await поток меняется, и блокировка не освобождается автоматически. lock компилируется в Monitor.Enter/Exit с try/finally, чтобы гарантировать освобождение блокировки даже при исключениях.
Длинный ответ
Зарегистрироваться
Развернутый ответ доступен только зарегистрированным пользователям.