Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Tür adı | İptal Belirteçlerini Çağrılara İlet |
| Kural Kimliği | CA2016 |
| Başlık | CancellationToken parametresini, parametre alan metotlara iletin |
| Kategori | Güvenilirlik |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Öneri olarak |
| Geçerli diller | C# ve Visual Basic |
Neden
Bu kural, CancellationToken parametresini kabul edebilen ancak herhangi birini geçirmeyen yöntem çağrılarını bulur ve ebeveyn yöntemin CancellationToken parametresini onlara iletmeyi önerir.
Kural açıklaması
Bu kural, son parametresi olarak bir CancellationToken alan yöntem tanımlarını analiz eder ve ardından gövdesinde çağrılan tüm yöntemleri analiz eder. Yöntem çağrılarından herhangi biri son parametre olarak bir CancellationToken kabul edebilirse veya son parametre olarak a CancellationToken alan bir aşırı yüklemeye sahipse, kural iptal bildiriminin bunu dinleyebilen tüm işlemlere yayılmasını sağlamak için bu seçeneğin kullanılmasını önerir.
Not
Kural CA2016, türün kullanılabildiği CancellationToken tüm .NET sürümlerinde kullanılabilir. Geçerli sürümler için CancellationToken "Şunlar için geçerlidir" bölümüne bakın.
İhlalleri düzeltme
İhlalleri el ile düzeltebilir veya Visual Studio'da bulunan kod düzeltmesini kullanabilirsiniz. Yöntem çağrısının yanında görünen ampulün üzerine gelin ve önerilen değişikliği seçin.
Aşağıdaki örnekte önerilen iki değişiklik gösterilmektedir:
İptal edilen işlem bildirimini daha düşük yöntem çağrılarına iletmekle ilgilenmiyorsanız, bu kuralın ihlalini gizlemeniz güvenlidir. Ayrıca, kural ihlalini engellemek için C# dilinde default, Visual Basic dilinde Nothing veya None açıkça geçirebilirsiniz.
Kural çeşitli ihlalleri algılayabilir. Aşağıdaki örneklerde kuralın algılayabileceğiniz durumlar gösterilmektedir:
Örnek 1
yöntem isteğe bağlı bir belirteç parametresi tanımladığından, kural ct parametresinin MyMethod'den MyMethodWithDefault çağrısına iletilmesini önerir.
using System.Threading;
namespace ConsoleApp
{
public static class MyTestClass
{
public static void MyMethodWithDefault(CancellationToken ct = default)
{
}
public static void MyMethod(CancellationToken ct)
{
MyMethodWithDefault();
}
}
}
Düzeltme:
Parametresini iletin ct :
public static void MyMethod(CancellationToken ct)
{
MyMethodWithDefault(ct);
}
İptal bildirimlerini daha düşük çağrılara iletmekle ilgilenmiyorsanız şunlardan birini yapabilirsiniz:
Açıkça iletin default:
public static void MyMethod(CancellationToken ct)
{
MyMethodWithDefault(default);
}
Veya açıkça geçirin CancellationToken.None:
public static void MyMethod(CancellationToken ct)
{
MyMethodWithDefault(CancellationToken.None);
}
Örnek 2
Kural, yöntemin CancellationToken parametresi alan bir aşırı yüklemesi olduğu için ct parametresinin MyMethod'den MyMethodWithOverload çağrısına iletilmesini önerir.
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();
}
}
}
Düzeltme:
Parametresini iletin ct :
public static void MyMethod(CancellationToken ct)
{
MyMethodWithOverload(ct);
}
İptal bildirimlerini daha düşük çağrılara iletmekle ilgilenmiyorsanız şunlardan birini yapabilirsiniz:
Açıkça belirtin default:
public static void MyMethod(CancellationToken ct)
{
MyMethodWithOverload(default);
}
Veya açıkça geçirin CancellationToken.None:
public static void MyMethod(CancellationToken ct)
{
MyMethodWithOverload(CancellationToken.None);
}
İhlal dışı örnekler
CancellationToken Üst yöntemdeki parametre son konumda değil:
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();
}
}
}
CancellationToken Varsayılan yöntemdeki parametre son konumda değil:
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();
}
}
}
CancellationToken Aşırı yükleme yöntemindeki parametresi son konumda değil:
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();
}
}
}
Üst yöntem birden CancellationToken fazla parametre tanımlar:
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();
}
}
}
Varsayılan değerleri olan yöntem birden CancellationToken fazla parametre tanımlar:
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();
}
}
}
Bir yöntem aşırı yüklemesi, birden fazla CancellationToken parametre tanımlar.
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();
}
}
}
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA2016
// The code that's violating the rule is on this line.
#pragma warning restore CA2016
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA2016.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.