Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| 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:
- System.Threading.Tasks.TaskFactory.StartNew Módszerek
- System.Threading.Tasks.Task.ContinueWith Módszerek
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.