CA2016: A CancellationToken paraméter továbbítása olyan metódusok felé, amelyek egy
Tulajdonság | Érték |
---|---|
Típus neve | ForwardCancellationTokenToInvocations |
Szabályazonosító | CA2016 |
Cím | A CancellationToken paraméter továbbítása olyan metódusok számára, amelyek egy |
Kategória | Megbízhatóság |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Javaslatként |
Ok
Ez a szabály megkeresi azokat a metódushívásokat, amelyek elfogadhatnak egy paramétert CancellationToken , de nem adnak át egyiket sem, és azt javasolja, hogy továbbítsák nekik a szülőmetódusokat CancellationToken
.
Szabály leírása
Ez a szabály az utolsó paraméterként használt CancellationToken
metódusdefiníciókat elemzi, majd elemzi a törzsében meghívott összes metódust. Ha a metódushívások bármelyike elfogadhat egy CancellationToken
utolsó paramétert, vagy olyan túlterheléssel rendelkezik, amely az utolsó paramétert veszi igénybe CancellationToken
, akkor a szabály azt javasolja, hogy használja inkább ezt a beállítást, hogy a lemondási értesítés minden olyan műveletre propagálásra kerüljön, amely meghallgatható.
Megjegyzés:
A CA2016 szabály minden .NET-verzióban elérhető, ahol a CancellationToken
típus elérhető. A vonatkozó verziókért tekintse meg a CancellationToken "Érvényes" szakaszát.
Szabálysértések kijavítása
A szabálysértéseket manuálisan is kijavíthatja, vagy használhatja a Visual Studióban elérhető kódjavítást. Vigye az egérmutatót a metódushívás mellett megjelenő villanykörte fölé, és válassza ki a javasolt módosítást.
Az alábbi példa két javasolt módosítást mutat be:
Ha nem aggódik a megszakított művelet értesítésének alacsonyabb metódushívásokra való továbbítása miatt, nyugodtan letilthatja a szabály megsértését. A C# (Nothing
Visual Basicben) None vagy a szabálysértés letiltására is lehetősége default
van.
A szabály számos szabálysértést képes észlelni. Az alábbi példák azokat az eseteket mutatják be, amelyeket a szabály képes észlelni:
1. példa
A szabály azt javasolja, hogy továbbítsa a paramétert MyMethod
a c
MyMethodWithDefault
meghívásnak, mert a metódus egy opcionális tokenparamétert határoz meg:
using System.Threading;
namespace ConsoleApp
{
public static class MyTestClass
{
public static void MyMethodWithDefault(CancellationToken ct = default)
{
}
public static void MyMethod(CancellationToken c)
{
MyMethodWithDefault();
}
}
}
Erősít:
A paraméter továbbítása c
:
public static void MyMethod(CancellationToken c)
{
MyMethodWithDefault(c);
}
Ha nem aggódik amiatt, hogy a lemondási értesítéseket alacsonyabb meghívásokra továbbítja, a következőkre van szüksége:
Explicit módon adja át default
:
public static void MyMethod(CancellationToken c)
{
MyMethodWithDefault(default);
}
Vagy explicit módon adja át CancellationToken.None
:
public static void MyMethod(CancellationToken c)
{
MyMethodWithDefault(CancellationToken.None);
}
2. példa
A szabály azt javasolja, hogy továbbítsa a c
paramétert MyMethod
a MyMethodWithOverload
meghívásnak, mert a metódus túlterheléssel rendelkezik, amely egy paramétert CancellationToken
vesz igénybe:
using System.Threading;
namespace ConsoleApp
{
public static class MyTestClass
{
public static void MyMethodWithOverload()
{
}
public static void MyMethodWithOverload(CancellationToken ct = default)
{
}
public static void MyMethod(CancellationToken c)
{
MyMethodWithOverload();
}
}
}
Erősít:
A paraméter továbbítása c
:
public static void MyMethod(CancellationToken c)
{
MyMethodWithOverload(c);
}
Ha nem aggódik amiatt, hogy a lemondási értesítéseket alacsonyabb meghívásokra továbbítja, a következőkre van szüksége:
Explicit módon adja át default
:
public static void MyMethod(CancellationToken c)
{
MyMethodWithOverload(default);
}
Vagy explicit módon adja át CancellationToken.None
:
public static void MyMethod(CancellationToken c)
{
MyMethodWithOverload(CancellationToken.None);
}
Nem szabálysértési példák
A CancellationToken
szülőmetódus paramétere nem az utolsó pozícióban van:
using System.Threading;
namespace ConsoleApp
{
public static class MyTestClass
{
public static void MyMethodWithDefault(CancellationToken ct = default)
{
}
public static void MyMethod(CancellationToken c, int lastParameter)
{
MyMethodWithDefault();
}
}
}
Az CancellationToken
alapértelmezett metódus paramétere nem az utolsó helyen található:
using System.Threading;
namespace ConsoleApp
{
public static class MyTestClass
{
public static void MyMethodWithDefault(CancellationToken ct = default, int lastParameter = 0)
{
}
public static void MyMethod(CancellationToken c)
{
MyMethodWithDefault();
}
}
}
A CancellationToken
túlterhelési metódus paramétere nem az utolsó helyzetben van:
using System.Threading;
namespace ConsoleApp
{
public static class MyTestClass
{
public static void MyMethodWithOverload(int lastParameter)
{
}
public static void MyMethodWithOverload(CancellationToken ct, int lastParameter)
{
}
public static void MyMethod(CancellationToken c)
{
MyMethodWithOverload();
}
}
}
A szülőmetódus egynél több paramétert CancellationToken
határoz meg:
using System.Threading;
namespace ConsoleApp
{
public static class MyTestClass
{
public static void MyMethodWithDefault(CancellationToken ct = default)
{
}
public static void MyMethod(CancellationToken c1, CancellationToken c2)
{
MyMethodWithDefault();
}
}
}
Az alapértelmezett metódus egynél több paramétert CancellationToken
határoz meg:
using System.Threading;
namespace ConsoleApp
{
public static class MyTestClass
{
public static void MyMethodWithDefault(CancellationToken c1 = default, CancellationToken c2 = default)
{
}
public static void MyMethod(CancellationToken c)
{
MyMethodWithDefault();
}
}
}
A metódus túlterhelése több paramétert CancellationToken
határoz meg:
using System.Threading;
namespace ConsoleApp
{
public static class MyTestClass
{
public static void MyMethodWithOverload(CancellationToken c1, CancellationToken c2)
{
}
public static void MyMethodWithOverload()
{
}
public static void MyMethod(CancellationToken c)
{
MyMethodWithOverload();
}
}
}
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 CA2016
// The code that's violating the rule is on this line.
#pragma warning restore CA2016
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.CA2016.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: