Aracılığıyla paylaş


SYSLIB0006: Thread.Abort desteklenmiyor

Aşağıdaki API'ler .NET 5'te başlayarak kullanım dışı olarak işaretlenir. Bu API'lerin kullanılması derleme zamanında SYSLIB0006 uyarı ve çalışma zamanında PlatformNotSupportedException oluşturur.

Geçerli iş parçacığı dışında bir iş parçacığını sonlandırmak için Thread.Abort çağırdığınızda, hangi kodun yürütüldüğünü veya yürütülmediğini ve ThreadAbortException atıldığında ne zaman olduğunu 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, Thread.Abort çağrısı yapmak, statik oluşturucuların yürütülmesini veya yönetilen ya da yönetilmeyen kaynakların serbest bırakılmasını engelleyebilir. Bu nedenle Thread.Abort her zaman .NET Core ve .NET 5+ üzerinde bir PlatformNotSupportedException fırlatır.

Geçici Çözümler

CancellationToken kullanarak bir iş birimini durdurun, işleme çağrısını Thread.Abort yapmayın. 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);
    }
}

Uyarıyı gizleme

Eski API'leri kullanmanız gerekiyorsa, uyarıyı kodda veya proje dosyanızda gizleyebilirsiniz.

Yalnızca tek bir ihlali engellemek için, önişlemci yönergelerini kaynak dosyanıza ekleyerek uyarıyı devre dışı bırakın ve sonra yeniden etkinleştirin.

// Disable the warning.
#pragma warning disable SYSLIB0006

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0006

Projenizdeki tüm SYSLIB0006 uyarılarını engellemek için proje dosyanıza bir <NoWarn> özelliği ekleyin.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
  </PropertyGroup>
</Project>

Daha fazla bilgi için bkz. uyarıları gizleme.

Ayrıca bakınız