Udostępnij za pośrednictwem


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 metody przerwania wątku innego niż bieżący wątek nie wiadomo, jaki kod został wykonany lub nie można wykonać go ThreadAbortException po wyświetleniu. Nie można również mieć pewności co do stanu aplikacji ani jakiejkolwiek aplikacji i stanu użytkownika, który jest odpowiedzialny za zachowanie. Na przykład wywołanie Thread.Abort może uniemożliwić wykonywanie konstruktorów statycznych lub wydanie zarządzanych lub niezarządzanych zasobów. Z tego powodu Thread.Abort zawsze zgłasza wartość w programach PlatformNotSupportedException .NET Core i .NET 5+.

Obejścia

Użyj elementu , CancellationToken aby przerwać przetwarzanie jednostki pracy zamiast wywoływania metody 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 SYSLIB0006 ostrzeżenia w projekcie, dodaj <NoWarn> właściwość 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 też