Thread.Abort kullanımdan kaldırıldı
API'ler Thread.Abort kullanımdan kaldırıldı. .NET 5 veya sonraki bir sürümü hedefleyen projeler, bu yöntemler çağrılırsa derleme zamanı uyarısıyla SYSLIB0006
karşılaşır.
Açıklama değiştirildi
Daha önce, için Thread.Abort çağrıları derleme zamanı uyarıları üretmedi, ancak yöntemi çalışma zamanında bir PlatformNotSupportedException oluşturmuş.
.NET 5'den başlayarak, Thread.Abort eski olarak uyarı olarak işaretlenir. Bu yöntemin çağrılması derleyici uyarısı SYSLIB0006
üretir. yönteminin uygulanması değiştirilmez ve bir PlatformNotSupportedExceptionoluşturma işlemine devam eder.
Değişiklik nedeni
Thread.Abort.NET Framework dışındaki tüm .NET uygulamalarına her zaman bir PlatformNotSupportedException atıldığı göz önüne alındığında, ObsoleteAttribute yöntemine eklenerek çağrılan yerlere dikkat çekiliyordu.
Geçerli iş parçacığı dışında bir iş parçacığını durdurmak için çağırdığınızda Thread.Abort , hangi kodun yürütüldiğini veya ne zaman ThreadAbortException yürütülediğini bilmezsiniz. Ayrıca uygulamanızın durumundan veya korumadan sorumlu olduğu herhangi bir uygulama ve kullanıcı durumundan da emin olamazsınız. Örneğin, çağrı statik Thread.Abort oluşturucuların yürütülmesini veya yönetilen veya yönetilmeyen kaynakların yayınlanmasını engelleyebilir. Bu nedenle her Thread.Abort zaman .NET Core ve .NET 5+ üzerinde bir PlatformNotSupportedException oluşturur.
Sürüm kullanıma sunulmuştur
5.0
Önerilen eylem
bir iş biriminin işlenmesini çağırmak Thread.Abortyerine durdurmak için kullanınCancellationToken. Aşağıdaki örnekte kullanımı gösterilmektedir CancellationToken.
void ProcessPendingWorkItemsNew(CancellationToken cancellationToken) { if (QueryIsMoreWorkPending()) { // If the CancellationToken is marked as "needs to cancel", // this will throw the appropriate exception. cancellationToken.ThrowIfCancellationRequested(); WorkItem work = DequeueWorkItem(); ProcessWorkItem(work); } }
Daha fazla bilgi için bkz . Yönetilen iş parçacıklarında iptal etme.
Derleme zamanı uyarısını engellemek için uyarı kodunu
SYSLIB0006
gizleyin. Uyarı kodu özeldir Thread.Abort ve kodunuzdaki diğer eski uyarıları gizlemez. Ancak uyarıyı engellemek yerine çağrısı Thread.Abort kaldırmanızı öneririz.void MyMethod() { #pragma warning disable SYSLIB0006 Thread.CurrentThread.Abort(); #pragma warning restore SYSLIB0006 }
Uyarıyı proje dosyasında da gizleyebilirsiniz.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "Thread.Abort is obsolete" warnings for entire project. --> <NoWarn>$(NoWarn);SYSLIB0006</NoWarn> </PropertyGroup>