Sdílet prostřednictvím


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í v lock 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 lockprávě eduje, musí být odkazovými typy. Typy hodnot nejsou povolené.
  • Výraz await nelze použít v oboru lock příkazu.
  • Příkaz lock nelze použít s metodami async ani výrazy lambda. U této chyby můžete nahradit typ uzamčeného objektu jiným typem. Příkaz lock 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í v lock 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 .