Udostępnij przez


SYSLIB0006: Funkcja Thread.Abort nie jest obsługiwana

Następujące interfejsy API są oznaczone jako przestarzałe, począwszy od platformy .NET 5. Użycie tych interfejsów API generuje ostrzeżenie SYSLIB0006 w czasie kompilacji i PlatformNotSupportedException w czasie wykonywania.

W przypadku wywołania Thread.Abort w celu przerwania działania wątku innego niż bieżący, nie można ustalić, jaki kod został wykonany lub niepowodzenie w wykonaniu, gdy zostanie wyrzucony ThreadAbortException. Nie można również mieć pewności co do stanu swojej aplikacji ani stanu aplikacji i użytkownika, za którego zachowanie jest odpowiedzialna aplikacja. Na przykład wywołanie Thread.Abort może uniemożliwić wykonanie konstruktorów statycznych lub zwolnienie zarządzanych albo niezarządzanych zasobów. Z tego powodu Thread.Abort zawsze zgłasza wartość w programach PlatformNotSupportedException .NET Core i .NET 5+.

Rozwiązania alternatywne

Użyj CancellationToken aby przerwać przetwarzanie jednostki pracy zamiast wywoływania Thread.Abort. W poniższym przykładzie pokazano użycie metody 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);
    }
}

Pomijanie ostrzeżenia

Jeśli musisz używać przestarzałych interfejsów API, możesz pominąć ostrzeżenie w kodzie lub w pliku projektu.

Aby pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć ostrzeżenie.

// Disable the warning.
#pragma warning disable SYSLIB0006

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

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

Aby pominąć wszystkie ostrzeżenia SYSLIB0006 w projekcie, dodaj właściwość <NoWarn> do pliku projektu.

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

Aby uzyskać więcej informacji, zobacz Pomijanie ostrzeżeń.

Zobacz także