Chyby a upozornění související se lock
synchronizací příkazů a vláken
K příkazu a synchronizaci vláken dochází k několika chybámlock
:
- CS0185: Type není referenčním typem požadovaným příkazem lock.
- CS1996: V textu příkazu lock nelze čekat.
- CS9217: Příkaz lock pro hodnotu typu System.Threading.Lock nelze použít v asynchronních metodách nebo asynchronních výrazech lambda.
Kromě toho může kompilátor vytvořit následující upozornění související s lock
příkazy a synchronizací vláken:
- CS9216: Hodnota typu
System.Threading.Lock
převedená na jiný typ bude pravděpodobně používat neúmyslné uzamčení založené na monitorování vlock
příkazu.
Chyby příkazu lock
- CS0185: Type není referenčním typem požadovaným příkazem lock.
- CS1996: V textu příkazu lock nelze čekat.
- CS9217: Příkaz lock pro hodnotu typu System.Threading.Lock nelze použít v asynchronních metodách nebo asynchronních výrazech lambda.
Tyto chyby značí, že váš kód porušuje pravidla týkající se lock
příkazu:
- Objekt, který se
lock
právě eduje, musí být odkazovými typy. Typy hodnot nejsou povolené. - Výraz
await
nelze použít v oborulock
příkazu. - Příkaz
lock
nelze použít s metodamiasync
ani výrazy lambda. U této chyby můžete nahradit typ uzamčeného objektu jiným typem. Příkazlock
používá Monitor rozhraní API.
Abyste mohli postupovat podle pravidel lock
tohoto příkazu, musíte kód aktualizovat.
upozornění na zámek
- CS9216: Hodnota typu
System.Threading.Lock
převedená na jiný typ bude pravděpodobně používat neúmyslné uzamčení založené na monitorování vlock
příkazu.
Počínaje jazykem C# 13 generuje lock
specializovaný kód, pokud je cílovým objektem System.Threading.Lock
objekt. Kompilátor vygeneruje toto upozornění při použití objektu Lock
, ale váš kód převede jeho typ na něco jiného. Kompilátor proto vygeneruje obecný kód uzamčení, nikoli kód pro uzamčení specifický pro Lock
daný typ. Příklad:
object lockObject = new System.Threading.Lock();
lock (lockObject) // CS9216
{
// .. Your code
}
Měli byste zajistit, aby proměnná nebo výraz představoval typ objektu Lock
.