CA2016: A CancellationToken paraméter továbbitása olyan metódusoknak, amelyek elfogadják azt.

Tulajdonság Érték
Típus neve A "CancellationToken" továbbítása a meghívásokhoz
Szabályazonosító CA2016
Cím A CancellationToken paramétert továbbítsa olyan metódusokhoz, amelyek azt fogadják.
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 Javaslatként
Alkalmazandó nyelvek C# és Visual Basic

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:

CA2016 szabály – A CancellationToken paraméter továbbítása olyan metódusokhoz, amelyek ezt paraméterként megkapják

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 szabálysértés elkerülése érdekében kifejezetten átadhatja a default C#-ban, a Nothing Visual Basicben vagy a None.

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 az ct paramétert továbbítsa a MyMethodMyMethodWithDefault 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 ct)
        {
            MyMethodWithDefault();
        }
    }
}

Javítás:

A ct paraméter továbbítása

public static void MyMethod(CancellationToken ct)
{
    MyMethodWithDefault(ct);
}

Ha nem aggódik amiatt, hogy a lemondási értesítéseket alacsonyabb meghívásokra továbbítja, a következőket teheti:

Kifejezetten adja át default:

public static void MyMethod(CancellationToken ct)
{
    MyMethodWithDefault(default);
}

Vagy explicit módon adja át CancellationToken.None:

public static void MyMethod(CancellationToken ct)
{
    MyMethodWithDefault(CancellationToken.None);
}

2. példa

A szabály azt javasolja, hogy továbbítsa a ct 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 ct)
        {
            MyMethodWithOverload();
        }
    }
}

Javítás:

A ct paraméter továbbítása:

public static void MyMethod(CancellationToken ct)
{
    MyMethodWithOverload(ct);
}

Ha nem aggódik amiatt, hogy a lemondási értesítéseket alacsonyabb szintű hívásokra továbbítja, akkor választhat a következő lehetőségek közül:

Kifejezetten adja át default:

public static void MyMethod(CancellationToken ct)
{
    MyMethodWithOverload(default);
}

Vagy explicit módon adja át CancellationToken.None:

public static void MyMethod(CancellationToken ct)
{
    MyMethodWithOverload(CancellationToken.None);
}

Példák a szabályok megsértésének hiányára

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 ct, 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 ct)
        {
            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 ct)
        {
            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 ct1, CancellationToken ct2)
        {
            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 ct1 = default, CancellationToken ct2 = default)
        {
        }

        public static void MyMethod(CancellationToken ct)
        {
            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 ct1, CancellationToken ct2)
        {
        }

        public static void MyMethodWithOverload()
        {
        }

        public static void MyMethod(CancellationToken ct)
        {
            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.