Les erreurs et les avertissements liés à l’instruction lock
et à la synchronisation de thread
Il existe des erreurs liés à l’instruction lock
et à la synchronisation de thread :
- CS0185 : « type » n’est pas un type référence requis par l’instruction Lock.
- CS1996 : Impossible d’attendre dans le corps d’une instruction Lock
- CS9217 : Une instruction Lock sur une valeur de type « System.Threading.Lock » ne peut pas être utilisée dans des méthodes asynchrones ou des expressions lambda asynchrones.
En outre, il est possible que le compilateur produise l’avertissement suivant lié à des instructions lock
et à la synchronisation de thread :
- CS9216 : Une valeur de type
System.Threading.Lock
convertie en type différent va probablement utiliser un verrouillage basé sur le moniteur non intentionnel dans une instructionlock
.
erreurs d’instruction Lock
- CS0185 : « type » n’est pas un type référence requis par l’instruction Lock.
- CS1996 : Impossible d’attendre dans le corps d’une instruction Lock
- CS9217 : Une instruction Lock sur une valeur de type « System.Threading.Lock » ne peut pas être utilisée dans des méthodes asynchrones ou des expressions lambda asynchrones.
Ces erreurs indiquent que votre code viole des règles concernant l’instruction lock
:
- L’objet étant
lock
é doit être un type référence. Les types de valeurs ne sont pas permis. - Une expression
await
ne peut pas être utilisée dans l’étendue d’une instructionlock
. - Vous ne pouvez pas utiliser l’instruction
lock
avec des méthodesasync
ou des expressions lambda. Pour cette erreur, vous pouvez remplacer le type d’objet verrouillé par un autre. L’instructionlock
utilise l’API Monitor.
Vous devez mettre à jour votre code pour suivre les règles de l’instruction lock
.
avertissement Lock
- CS9216 : Une valeur de type
System.Threading.Lock
convertie en type différent va probablement utiliser un verrouillage basé sur le moniteur non intentionnel dans une instructionlock
.
À compter de C# 13, le lock
génère du code spécialisé quand l’objet cible est un objet System.Threading.Lock
. Le compilateur génère cet avertissement lorsque vous utilisez un objet Lock
, mais votre code convertit son type par autre chose. Par conséquent, le compilateur génère le code de verrouillage général, et non le code de verrouillage spécifique au type Lock
. Par exemple :
object lockObject = new System.Threading.Lock();
lock (lockObject) // CS9216
{
// .. Your code
}
Vous devez vérifier que la variable ou l’expression représente le type de l’objet Lock
.