CA2008: Nie twórz zadań bez przekazywania elementu TaskScheduler
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA2008 |
Tytuł | Nie twórz zadań bez przekazania klasy TaskScheduler |
Kategoria | Niezawodność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | 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).
Uwaga
VSTHRD105 — unikaj przeciążeń metod, które zakładają, że taskScheduler.Current jest podobną regułą zaimplementowaną w pakiecie Microsoft.VisualStudio.Threading.Analyzers .
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.