Partager via


SYSLIB0006 : Thread.Abort n’est pas pris en charge

Les API suivantes sont marquées comme obsolètes à compter de .NET 5. L’utilisation de ces API génère un avertissement SYSLIB0006 à la compilation et une exception PlatformNotSupportedException à l’exécution.

Lorsque vous appelez Thread.Abort pour abandonner un thread autre que le thread actuel, vous ne savez pas quel code s’est exécuté ou n’a pas pu s’exécuter lorsque ThreadAbortException est levée. Vous ne pouvez pas non plus être certain de l’état de votre application ni de l’état de toute application et de l’utilisateur qu’elle doit préserver. Par exemple, l’appel de Thread.Abort peut empêcher l’exécution de constructeurs statiques ou la libération de ressources managées ou non managées. Pour cette raison, Thread.Abort lève toujours une PlatformNotSupportedException sur .NET Core et .NET 5+.

Solutions de contournement

Utilisez un CancellationToken pour abandonner le traitement d’une unité de travail au lieu d’appeler Thread.Abort. L'exemple suivant illustre l'utilisation de 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);
    }
}

Supprimer un avertissement

Si vous devez utiliser les API obsolètes, vous pouvez supprimer l’avertissement dans le code ou dans votre fichier projet.

Pour supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver, puis réactiver l’avertissement.

// Disable the warning.
#pragma warning disable SYSLIB0006

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

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

Pour supprimer tous les avertissements SYSLIB0006 dans votre projet, ajoutez une propriété <NoWarn> à votre fichier projet.

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

Pour plus d’informations, consultez Supprimer des avertissements.

Voir aussi