CA2008: Nie twórz zadań bez przekazywania elementu TaskScheduler

Właściwości Wartość
Identyfikator reguły CA2008
Stanowisko Nie twórz zadań bez przekazania klasy TaskScheduler
Kategoria Niezawodność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Operacja tworzenia lub kontynuacji zadania używa przeciążenia metody, które nie określa parametru TaskScheduler .

Opis reguły

Następujące metody tworzenia i kontynuacji zadań platformy .NET mają przeciążenia, które umożliwiają określenie lub pominięcie TaskScheduler wystąpienia:

Zawsze określ jawny TaskScheduler argument, aby uniknąć wartości domyślnej Current , której zachowanie jest definiowane przez obiekt wywołujący i może się różnić w czasie wykonywania. Current Zwraca harmonogram skojarzony z tym, co Task jest aktualnie uruchomione w tym wątku. Jeśli nie ma takiego zadania, zwraca Defaultwartość , która reprezentuje pulę wątków. Użycie Current może prowadzić do zakleszczenia lub problemów z odpowiedzią interfejsu użytkownika w niektórych sytuacjach, gdy miało to na celu utworzenie zadania w puli wątków, ale zamiast tego czeka na powrót do wątku interfejsu użytkownika.

Aby uzyskać więcej informacji i szczegółowe przykłady, zobacz New TaskCreationOptions and TaskContinuationOptions in .NET Framework 4.5 (Nowe instrukcje taskCreationOptions i TaskContinuationOptions w programie .NET Framework 4.5).

Jak naprawić naruszenia

Aby naprawić naruszenia, wywołaj przeciążenie metody, które przyjmuje metodę TaskScheduler i jawnie przekaż Default lub Current , aby intencja jest jasna.

Kiedy pomijać ostrzeżenia

To ostrzeżenie jest przeznaczone przede wszystkim dla bibliotek, w których kod może być wykonywany w dowolnych środowiskach i gdzie kod nie powinien zakładać środowiska ani sposobu wywoływania metody lub oczekiwania na nie. Może być odpowiednie pomijanie ostrzeżenia dla projektów reprezentujących kod aplikacji, a nie kod biblioteki.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA2008
// The code that's violating the rule is on this line.
#pragma warning restore CA2008

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA2008.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz też