Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Błędy i ostrzeżenia związane z instrukcją i synchronizacją
Istnieje kilka błędów związanych z instrukcją i synchronizacją lock wątków:
- CS0185: typ nie jest typem odwołania wymaganym przez instrukcję lock.
- CS1996: Nie można oczekiwać w treści instrukcji lock
- CS9217: Nie można używać instrukcji lock dla wartości typu "System.Threading.Lock" w metodach asynchronicznych ani asynchronicznych wyrażeniach lambda.
Ponadto kompilator może wygenerować następujące ostrzeżenie związane z lock instrukcjami i synchronizacją wątków:
- CS9216: Wartość typu
System.Threading.Lockprzekonwertowana na inny typ będzie używać prawdopodobnie niezamierzonej blokady opartej na monitorze wlockinstrukcji .
błędy instrukcji lock
- CS0185: typ nie jest typem odwołania wymaganym przez instrukcję lock.
- CS1996: Nie można oczekiwać w treści instrukcji lock
- CS9217: Nie można używać instrukcji lock dla wartości typu "System.Threading.Lock" w metodach asynchronicznych ani asynchronicznych wyrażeniach lambda.
Te błędy wskazują, że kod narusza reguły dotyczące instrukcji lock :
- Obiekt, który jest
lockwdrażany, musi być typami referencyjnymi. Typy wartości nie są dozwolone. - Nie
awaitmożna użyć wyrażenia w zakresie instrukcjilock. - Nie
lockmożna używać instrukcji z metodami ani wyrażeniamiasynclambda. W przypadku tego błędu można zamienić typ obiektu zablokowanego na inny typ. Instrukcjalockużywa interfejsu Monitor API.
Musisz zaktualizować kod, aby postępować zgodnie z regułami instrukcji lock .
ostrzeżenie o blokadzie
- CS9216: Wartość typu
System.Threading.Lockprzekonwertowana na inny typ będzie używać prawdopodobnie niezamierzonej blokady opartej na monitorze wlockinstrukcji .
Począwszy od języka C# 13, program generuje wyspecjalizowany kod, lock gdy obiekt docelowy jest obiektem System.Threading.Lock . Kompilator generuje to ostrzeżenie podczas korzystania z Lock obiektu, ale kod konwertuje jego typ na coś innego. W związku z tym kompilator generuje ogólny kod blokowania, a nie kod blokowania specyficzny dla Lock typu. Na przykład:
object lockObject = new System.Threading.Lock();
lock (lockObject) // CS9216
{
// .. Your code
}
Upewnij się, że zmienna lub wyrażenie reprezentuje typ Lock obiektu.