Fouten en waarschuwingen met betrekking tot de lock
instructie en threadsynchronisatie
Er zijn enkele fouten met betrekking tot de lock
instructie en threadsynchronisatie:
- CS0185: 'type' is geen referentietype zoals vereist voor de vergrendelingsinstructie.
- CS1996: Kan niet wachten in de hoofdtekst van een vergrendelingsinstructie
- CS9217: Een vergrendelingsinstructie voor een waarde van het type System.Threading.Lock kan niet worden gebruikt in asynchrone methoden of asynchrone lambda-expressies.
Daarnaast kan de compiler de volgende waarschuwing opleveren met betrekking tot lock
instructies en threadsynchronisatie:
- CS9216: Een waarde van het type
System.Threading.Lock
dat is geconverteerd naar een ander type, gebruikt waarschijnlijk onbedoelde vergrendeling op basis van bewaking.lock
vergrendelingsinstructiefouten
- CS0185: 'type' is geen referentietype zoals vereist voor de vergrendelingsinstructie.
- CS1996: Kan niet wachten in de hoofdtekst van een vergrendelingsinstructie
- CS9217: Een vergrendelingsinstructie voor een waarde van het type System.Threading.Lock kan niet worden gebruikt in asynchrone methoden of asynchrone lambda-expressies.
Deze fouten geven aan dat uw code regels schendt met betrekking tot de lock
instructie:
- Het object dat wordt
lock
genummerd, moet een verwijzingstype zijn. Waardetypen zijn niet toegestaan. - Een
await
expressie kan niet worden gebruikt in het bereik van eenlock
instructie. - De
lock
instructie kan niet worden gebruikt metasync
methoden of lambda-expressies. Voor deze fout kunt u het type object vervangen dat is vergrendeld door een ander type. Delock
instructie maakt gebruik van de Monitor API.
U moet uw code bijwerken om de regels van de lock
instructie te volgen.
vergrendelingswaarschuwing
- CS9216: Een waarde van het type
System.Threading.Lock
dat is geconverteerd naar een ander type, gebruikt waarschijnlijk onbedoelde vergrendeling op basis van bewaking.lock
Vanaf C# 13 genereert de lock
gespecialiseerde code wanneer het doelobject een System.Threading.Lock
object is. De compiler genereert deze waarschuwing wanneer u een Lock
object gebruikt, maar uw code converteert het type naar iets anders. Daarom genereert de compiler de algemene vergrendelingscode, niet de vergrendelingscode die specifiek is voor het Lock
type. Voorbeeld:
object lockObject = new System.Threading.Lock();
lock (lockObject) // CS9216
{
// .. Your code
}
Zorg ervoor dat de variabele of expressie het type van het Lock
object vertegenwoordigt.