Share via


CA2008: Skapa inte aktiviteter utan att skicka en TaskScheduler

Property Värde
Regel-ID CA2008
Rubrik Skapa inte aktiviteter utan att skicka en TaskScheduler
Kategori Tillförlitlighet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

Orsak

En aktivitetsskapande eller fortsättningsåtgärd använder en metodöverbelastning som inte anger någon TaskScheduler parameter.

Regelbeskrivning

Följande metoder för att skapa .NET-aktiviteter och fortsättningar har överlagringar som gör det möjligt att ange eller utelämna en TaskScheduler instans:

Ange alltid ett explicit TaskScheduler argument för att undvika standardvärdet Current , vars beteende definieras av anroparen och kan variera vid körning. Current returnerar schemaläggaren som är associerad med det som Task för närvarande körs på den tråden. Om det inte finns någon sådan uppgift returneras Default, som representerar trådpoolen. Användning Current kan leda till problem med dödlägen eller UI-svarstider i vissa situationer, när den var avsedd att skapa uppgiften i trådpoolen, men i stället väntar den på att komma tillbaka till användargränssnittstråden.

Mer information och detaljerade exempel finns i New TaskCreationOptions and TaskContinuationOptions in .NET Framework 4.5.

Så här åtgärdar du överträdelser

Om du vill åtgärda överträdelser anropar du den metodöverbelastning som tar en TaskScheduler och uttryckligen skickar in Default eller Current för att göra avsikten tydlig.

När du ska ignorera varningar

Den här varningen är främst avsedd för bibliotek, där koden kan köras i godtyckliga miljöer och där koden inte bör göra antaganden om miljön eller hur anroparen av metoden kan anropa eller vänta på den. Det kan vara lämpligt att ignorera varningen för projekt som representerar programkod i stället för bibliotekskod.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även