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ó | CA2007 |
| Cím | Ne várj közvetlenül feladatra |
| 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
Az aszinkron metódus közvetlenül vár.Task
Szabály leírása
Amikor egy aszinkron metódus közvetlenül vár egy Task-re, a folytatás általában ugyanazon a szálon történik, amely létrehozta a feladatot, az aszinkron környezettől függően. Ez a viselkedés a teljesítmény szempontjából költséges lehet, és holtpontot eredményezhet a felhasználói felületen. Fontolja meg az Task.ConfigureAwait(Boolean) hívását, hogy jelezze a folytatási szándékát.
Szabálysértések kijavítása
A szabálysértések kijavításához hívja meg ConfigureAwait a várt Task-et. A continueOnCapturedContext paraméterhez átadhatja a true vagy a false értékeket.
A
ConfigureAwait(true)hívása a feladaton ugyanazt az eredményt adja, mint ha nem hívnánk meg kifejezetten ConfigureAwait. A metódus explicit meghívásával tudatja az olvasókkal, hogy szándékosan szeretné végrehajtani a folytatást az eredeti szinkronizálási környezetben.Hívja meg a
ConfigureAwait(false)-t a feladatra, hogy ütemezze a folytatásokat a szálkészletben, ezzel elkerülve a holtpontot a felhasználói felület szálán. Azfalseátadása jó megoldás alkalmazásfüggetlen kódtárakhoz.
Példa
A következő kódrészlet generálja a figyelmeztetést:
public async Task Execute()
{
Task task = null;
await task;
}
A szabálysértés kijavításához hívja ConfigureAwait fel a vártat Task:
public async Task Execute()
{
Task task = null;
await task.ConfigureAwait(false);
}
Mikor kell letiltani a figyelmeztetéseket?
Ez a figyelmeztetés 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á. Általában célszerű a figyelmeztetést teljes egészében mellőzni az olyan projektek esetében, amelyek kódtárkód helyett alkalmazáskódot jelölnek; Valójában az elemző alkalmazáskódon való futtatása (például egy WinForms- vagy WPF-projekt eseménykezelőinek gombkattintása) valószínűleg helytelen műveleteket eredményez.
Ezt a figyelmeztetést minden olyan helyzetben letilthatja, amikor a folytatást vissza kell ütemezni az eredeti környezetbe, vagy ha nincs ilyen környezet. Például, amikor egy gombkattintási eseménykezelőben ír kódot egy WinForms- vagy WPF-alkalmazásban, általában az 'await' utáni folytatásnak a felhasználói felületen kell futnia, ezért kívánatos a folytatás visszaütemezése az eredeti környezetbe. Egy másik példa, amikor kódot ír egy ASP.NET Core-alkalmazásba, alapértelmezés szerint nincs SynchronizationContext vagy TaskScheduler, ami miatt a ConfigureAwait viselkedést valójában nem változtatná meg.
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 CA2007
// The code that's violating the rule is on this line.
#pragma warning restore CA2007
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.CA2007.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kód konfigurálása elemzéshez
A következő beállítások segítségével konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.
Ezeket a beállításokat konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában szereplő összes szabályra (Megbízhatóság), amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.
Aszinkron void metódusok kizárása
Beállíthatja, hogy kizárja-e az aszinkron metódusokat, amelyek nem adnak vissza értéket ebből a szabályból. Az ilyen típusú metódusok kizárásához adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
# Package version 2.9.0 and later
dotnet_code_quality.CA2007.exclude_async_void_methods = true
# Package version 2.6.3 and earlier
dotnet_code_quality.CA2007.skip_async_void_methods = true
Kimeneti típus
Azt is beállíthatja, hogy mely kimeneti szerelvénytípusokra alkalmazza ezt a szabályt. Ha például ezt a szabályt csak konzolalkalmazást vagy dinamikusan csatolt kódtárat (azaz nem felhasználói felületi alkalmazást) előállító kódra szeretné alkalmazni, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CA2007.output_kind = ConsoleApplication, DynamicallyLinkedLibrary