Errores y advertencias relacionados con la instrucción lock
y la sincronización de subprocesos
Hay algunos errores relacionados con la instrucción lock
y la sincronización de subprocesos:
- CS0185: 'type' no es un tipo de referencia según lo requiera la instrucción lock.
- CS1996: No se puede esperar en el cuerpo de una instrucción lock
- CS9217: Una instrucción lock en un valor de tipo "System.Threading.Lock" no se puede usar en métodos asincrónicos ni expresiones lambda asincrónicas.
Además, el compilador puede generar las siguientes advertencias relacionadas con las instrucciones lock
y la sincronización de subprocesos:
- CS9216: Un valor de tipo
System.Threading.Lock
convertido a otro tipo usará probablemente bloqueos no deseados basados en monitores enlock
instrucción.
errores de instrucción lock
- CS0185: 'type' no es un tipo de referencia según lo requiera la instrucción lock.
- CS1996: No se puede esperar en el cuerpo de una instrucción lock
- CS9217: Una instrucción lock en un valor de tipo "System.Threading.Lock" no se puede usar en métodos asincrónicos ni expresiones lambda asincrónicas.
Estos errores indican que el código infringe las reglas relativas a la; lock
la instrucción:
- El objeto que se va a
lock
crear debe ser un tipo de referencia. No se permiten tipos de valor. - No se puede usar una expresión
await
en el ámbito de una instrucciónlock
. - La instrucción
lock
no se puede usar conasync
métodos o expresiones lambda. Para este error, puede reemplazar el tipo de objeto bloqueado por otro tipo. La instrucciónlock
usa la API de Monitor.
Debe actualizar el código para seguir las reglas de la instrucción lock
.
advertencia de bloqueo
- CS9216: Un valor de tipo
System.Threading.Lock
convertido a otro tipo usará probablemente bloqueos no deseados basados en monitores enlock
instrucción.
A partir de C# 13, el lock
genera código especializado cuando el objeto de destino es un objeto System.Threading.Lock
. El compilador genera esta advertencia cuando se usa un objeto Lock
, pero el código convierte su tipo en otra cosa. Por lo tanto, el compilador genera el código de bloqueo general, no el código de bloqueo específico del tipo Lock
. Por ejemplo:
object lockObject = new System.Threading.Lock();
lock (lockObject) // CS9216
{
// .. Your code
}
Debe asegurarse de que la variable o expresión representa el tipo del objeto Lock
.