Fehler und Warnungen im Zusammenhang mit der lock
-Anweisung und der Threadsynchronisierung
Es gibt einige Fehler im Zusammenhang mit der lock
-Anweisung und der Threadsynchronisierung:
- CS0185:„type“ ist kein Verweistyp, wie für die lock-Anweisung erforderlich.
- CS1996:Kann nicht im Körper einer lock-Anweisung warten
- CS9217:Eine lock-Anweisung für einen Wert vom Typ „System.Threading.Lock“ kann nicht in asynchronen Methoden oder asynchronen Lambdaausdrücken verwendet werden.
Darüber hinaus kann der Compiler die folgende Warnung im Zusammenhang mit lock
-Anweisungen und Threadsynchronisierung generieren:
- CS9216:Ein Wert vom Typ
System.Threading.Lock
, der in einen anderen Typ konvertiert wird, verwendet wahrscheinlich unbeabsichtigt die monitorbasierte Sperrung in derlock
-Anweisung.
Fehler bei der lock-Anweisung
- CS0185:„type“ ist kein Verweistyp, wie für die lock-Anweisung erforderlich.
- CS1996:Kann nicht im Körper einer lock-Anweisung warten
- CS9217:Eine lock-Anweisung für einen Wert vom Typ „System.Threading.Lock“ kann nicht in asynchronen Methoden oder asynchronen Lambdaausdrücken verwendet werden.
Diese Fehler deuten darauf hin, dass Ihr Code gegen Regeln für die lock
-Anweisung verstößt:
- Das Objekt, für das
lock
ausgeführt wird, muss ein Verweistyp sein. Werttypen sind nicht zulässig. - Ein
await
-Ausdruck kann nicht im Bereich einerlock
-Anweisung verwendet werden. - Die
lock
-Anweisung kann nicht mitasync
-Methoden oder Lambdaausdrücken verwendet werden. Für diesen Fehler können Sie den Typ des gesperrten Objekts durch einen anderen Typ ersetzen. Dielock
-Anweisung verwendet die Monitor-API.
Sie müssen Ihren Code so ändern, dass er den Regeln für die lock
-Anweisung entspricht.
Warnungen bei der lock-Anweisung
- CS9216:Ein Wert vom Typ
System.Threading.Lock
, der in einen anderen Typ konvertiert wird, verwendet wahrscheinlich unbeabsichtigt die monitorbasierte Sperrung in derlock
-Anweisung.
Ab C# 13 generiert lock
speziellen Code, wenn das Zielobjekt ein System.Threading.Lock
-Objekt ist. Der Compiler generiert diese Warnung, wenn Sie ein Lock
-Objekt verwenden, das von Ihrem Code aber in einen anderen Typ konvertiert wird. Daher generiert der Compiler den allgemeinen Sperrcode, nicht den spezifischen Sperrcode für den Typ Lock
. Zum Beispiel:
object lockObject = new System.Threading.Lock();
lock (lockObject) // CS9216
{
// .. Your code
}
Stellen Sie sicher, dass die Variable oder der Ausdruck den Typ des Lock
-Objekts darstellt.