CA2008: Ne hozzon létre feladatokat TaskScheduler átadása nélkül

Tulajdonság Érték
Szabályazonosító CA2008
Cím Ne hozzon létre feladatokat a TaskScheduler átadása nélkül.
Kategória Megbízhatóság
A javítás romboló vagy nem romboló Nem törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Nem
Alkalmazandó nyelvek C# és Visual Basic

Ok

Egy tevékenység létrehozási vagy folytatási művelet olyan metódustúlterhelést használ, amely nem ad meg TaskScheduler paramétert.

Szabály leírása

A következő .NET-feladat-létrehozási és -folytatási metódusok túlterheléssel rendelkeznek, amelyek lehetővé teszik egy TaskScheduler példány megadását vagy kihagyását:

Mindig adjon meg explicit TaskScheduler argumentumot az alapértelmezett Current érték elkerülése érdekében, amelynek viselkedését a hívó határozza meg, és futásidőben változhat. Current visszaadja az adott szálon jelenleg futó ütemezési Task kiszolgálót. Ha nincs ilyen feladat, akkor visszaadja a Default-t, ami a szálkészletet képviseli. A Current használata holtpontokhoz vagy a felhasználói felület válaszképességi problémáihoz vezethet bizonyos helyzetekben, amikor a feladatot a szálkészleten kívánták létrehozni, de mégis megvárja, hogy visszakerüljön a felhasználói felületi szálra.

További információkért és részletes példákért lásd New TaskCreationOptions and TaskContinuationOptions a .NET keretrendszer 4.5-ben.

Megjegyzés

VSTHRD105 – Kerülje a TaskScheduler.Current metódus túlterhelését, amely a Microsoft.VisualStudio.Threading.Analyzers csomagban implementált hasonló szabály.

Szabálysértések kijavítása

A szabálysértések kijavításához hívja meg azt a metódus túlterhelését, amely egy TaskScheduler paramétert vesz, és hogy a szándék egyértelművé váljon, adja át explicit módon a Default vagy Current értékeket.

Example

// This code violates the rule.
var badTask = Task.Factory.StartNew(
    () =>
    {
        // ...
    }
);
badTask.ContinueWith(
    t =>
    {
        // ...
    }
);

// This code satisfies the rule.
var goodTask = Task.Factory.StartNew(
    () =>
    {
        // ...
    },
    CancellationToken.None,
    TaskCreationOptions.None,
    TaskScheduler.Default
);
goodTask.ContinueWith(
    t =>
    {
        // ...
    },
    CancellationToken.None,
    TaskContinuationOptions.None,
    TaskScheduler.Default
);

Mikor kell letiltani a figyelmeztetéseket?

Ez a figyelmeztetés elsősorban kódtárakra vonatkozik, ahol a kód tetszőleges környezetekben végrehajtható, és ahol a kódnak nem szabad feltételezéseket tennie a környezetről, illetve arról, hogy a metódus hívója hogyan invokált vagy várakozhat rá. Előfordulhat, hogy a kódtárkód helyett alkalmazáskódot képviselő projektekre vonatkozó figyelmeztetést célszerű mellőzni.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.

Lásd még