Errori e avvisi correlati all'istruzione lock
e alla sincronizzazione dei thread
Esistono alcuni errori correlati all'istruzione lock
e alla sincronizzazione dei thread:
- CS0185: 'type' non è un tipo riferimento richiesto dall'istruzione lock.
- CS1996: Non è possibile includere un elemento await nel corpo di un'istruzione lock
- CS9217: Un'istruzione lock su un valore di tipo 'System.Threading.Lock' non può essere usata nei metodi asincroni o nelle espressioni lambda asincrone.
Inoltre, il compilatore potrebbe generare il seguente avviso correlato alle istruzioni lock
e alla sincronizzazione dei thread:
- CS9216: Un valore di tipo
System.Threading.Lock
convertito in un tipo diverso userà probabilmente un blocco basato sul monitoraggio imprevisto nell'istruzionelock
.
errori di istruzione lock
- CS0185: 'type' non è un tipo riferimento richiesto dall'istruzione lock.
- CS1996: Non è possibile includere un elemento await nel corpo di un'istruzione lock
- CS9217: Un'istruzione lock su un valore di tipo 'System.Threading.Lock' non può essere usato in metodi asincroni o espressioni lambda asincroni.
Questi errori indicano che il codice viola le regole relative all'istruzione lock
:
- L'oggetto
lock
ed deve essere un tipo riferimento. I tipi valore non sono consentiti. - Un'espressione
await
non può essere usata nell'ambito di un'istruzionelock
. - L'istruzione
lock
non può essere usata conasync
metodi o espressioni lambda. Per questo errore, è possibile sostituire il tipo di oggetto bloccato con un tipo diverso. L'istruzionelock
usa l'API Monitor.
È necessario aggiornare il codice per seguire le regole dell'istruzione lock
.
avviso di blocco
- CS9216: Un valore di tipo
System.Threading.Lock
convertito in un tipo diverso userà probabilmente un blocco basato sul monitoraggio imprevisto nell'istruzionelock
.
A partire da C# 13, il lock
genera un codice specializzato quando l'oggetto di destinazione è un oggetto System.Threading.Lock
. Il compilatore genera questo avviso quando si usa un oggetto Lock
, ma il codice converte il suo tipo in un altro. Di conseguenza, il compilatore genera il codice di blocco generale, non il codice di blocco specifico del tipo Lock
. Ad esempio:
object lockObject = new System.Threading.Lock();
lock (lockObject) // CS9216
{
// .. Your code
}
È necessario assicurarsi che la variabile o l'espressione rappresenti il tipo dell'oggetto Lock
.