CA2008: Keine Tasks ohne Übergabe eines TaskSchedulers erstellen

Eigenschaft Wert
Regel-ID CA2008
Titel Keine Tasks ohne Übergabe eines TaskSchedulers erstellen
Kategorie Zuverlässigkeit
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Nein

Ursache

Eine Taskerstellung oder ein Fortsetzungsvorgang verwendet eine Methodenüberladung, die keinen TaskScheduler-Parameter angibt.

Regelbeschreibung

Die folgenden .NET-Aufgabenerstellung und Fortsetzungsmethoden verfügen über Überladungen, die eine TaskScheduler-Instanz angeben oder weglassen:

Geben Sie immer ein explizites TaskScheduler-Argument an, um den Current-Standardwert zu vermeiden, dessen Verhalten vom Aufrufer definiert wird und der zur Laufzeit variieren kann. Current gibt den Scheduler zurück, der dem entspricht, was Task momentan in diesem Thread ausführt. Wenn keine solche Aufgabe vorhanden ist, wird Default zurückgegeben, die den Thread-Pool darstellt. Die Verwendung von Current kann in einigen Situationen zu Deadlocks oder Problemen mit der Reaktionsfähigkeit der Benutzeroberfläche führen, wenn die Aufgabe im Thread Pool erstellt wurde, stattdessen aber auf den UI-Thread zurückgelangt.

Weitere Informationen und ausführliche Beispiele finden Sie unter Neue TaskCreationOptions und TaskContinuationOptions in .NET Framework 4.5.

Behandeln von Verstößen

Um Verstöße zu beheben, müssen Sie die Methodenüberladung aufrufen, die einenTaskScheduler annimmt und explizit Default oder Current übergibt, um die Absicht klar zu machen.

Wann sollten Warnungen unterdrückt werden?

Diese Warnung ist für Bibliotheken bestimmt, bei denen der Code in beliebigen Umgebungen ausgeführt werden kann und bei denen im Code keine Annahmen getroffen werden sollten, welche Umgebung verwendet wird oder wie der Aufrufer der Methode den Aufruf durchführt oder darauf wartet. Es kann sinnvoll sein, die Warnung für Projekte zu unterdrücken, die den Anwendungscode anstelle von Bibliothekscode darstellen.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Siehe auch