Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ошибки и предупреждения, связанные с инструкцией
Существует несколько ошибок , связанных с инструкцией lock и синхронизацией потоков:
- CS0185: тип не является ссылочным типом, как это требуется оператором блокировки.
- CS1996: не удается ожидать в тексте оператора блокировки
- CS9217: оператор блокировки для значения типа System.Threading.Lock нельзя использовать в асинхронных методах или асинхронных лямбда-выражениях.
Кроме того, компилятор может создать следующее предупреждение, связанное с lock операторами и синхронизацией потоков:
- CS9216: значение типа, преобразованного в другой тип
System.Threading.Lock, будет использовать, скорее всего, непреднамеренное блокировка на основе монитора вlockинструкции.
Ошибки инструкции блокировки
- CS0185: тип не является ссылочным типом, как это требуется оператором блокировки.
- CS1996: не удается ожидать в тексте оператора блокировки
- CS9217: оператор блокировки для значения типа System.Threading.Lock нельзя использовать в асинхронных методах или асинхронных лямбда-выражениях.
Эти ошибки указывают на то, что код нарушает правила, касающиеся lock инструкции:
- Объект, который является
lockобъектом, должен быть ссылочным типом. Типы значений не допускаются. - Выражение
awaitнельзя использовать в область инструкцииlock. - Оператор
lockнельзя использовать сasyncметодами или лямбда-выражениями. Для этой ошибки можно заменить тип объекта, заблокированного другим типом. Инструкцияlockиспользует Monitor API.
Необходимо обновить код, чтобы следовать правилам инструкции lock .
Предупреждение о блокировке
- CS9216: значение типа, преобразованного в другой тип
System.Threading.Lock, будет использовать, скорее всего, непреднамеренное блокировка на основе монитора вlockинструкции.
Начиная с C# 13, lock создается специализированный код, когда целевой System.Threading.Lock объект является объектом. Компилятор создает это предупреждение при использовании Lock объекта, но код преобразует его тип в что-то другое. Поэтому компилятор создает общий код блокировки, а не код блокировки, характерный для Lock типа. Например:
object lockObject = new System.Threading.Lock();
lock (lockObject) // CS9216
{
// .. Your code
}
Необходимо убедиться, что переменная или выражение представляет тип Lock объекта.