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

  • 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 SYSLIB0006gizleyin. 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>
    

Etkilenen API’ler