Delen via


Thread.Abort is verouderd

De Thread.Abort API's zijn verouderd. Projecten die gericht zijn op .NET 5 of een latere versie, krijgen een waarschuwing over compileertijd SYSLIB0006 als deze methoden worden aangeroepen.

Wijzigingsbeschrijving

Voorheen leverden aanroepen geen Thread.Abort compileertijdwaarschuwingen op, maar de methode gooide een PlatformNotSupportedException runtime.

Vanaf .NET 5 wordt Thread.Abort deze gemarkeerd als waarschuwing. Als u deze methode aanroept, wordt er een compilerwaarschuwing gegenereerd SYSLIB0006. De implementatie van de methode is ongewijzigd en blijft een PlatformNotSupportedException.

Reden voor wijziging

Gezien dat Thread.Abort altijd alle PlatformNotSupportedException .NET-implementaties, met uitzondering van .NET Framework, ObsoleteAttribute wordt toegevoegd aan de methode om de aandacht te vestigen op plaatsen waar deze wordt aangeroepen.

Wanneer u een andere thread dan de huidige thread aanroept Thread.Abort , weet u niet welke code is uitgevoerd of niet kan worden uitgevoerd wanneer de ThreadAbortException thread wordt gegenereerd. U kunt ook niet zeker zijn van de status van uw toepassing of een toepassing en gebruikersstatus dat deze verantwoordelijk is voor het behoud. Aanroepen Thread.Abort kunnen bijvoorbeeld voorkomen dat statische constructors of de release van beheerde of onbeheerde resources worden uitgevoerd. Thread.Abort Daarom gooit u altijd een PlatformNotSupportedException .NET Core en .NET 5+.

Versie geïntroduceerd

5,0

  • Gebruik een CancellationToken om de verwerking van een werkeenheid af te breken in plaats van aan te roepen Thread.Abort. In het volgende voorbeeld ziet u het gebruik van 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);
        }
    }
    

    Zie Annulering in beheerde threads voor meer informatie.

  • Als u de waarschuwing voor de compilatietijd wilt onderdrukken, onderdrukt u de waarschuwingscode SYSLIB0006. De waarschuwingscode is specifiek voor Thread.Abort en onderdrukt deze niet voor andere inlegwaarschuwingen in uw code. U wordt echter aangeraden aanroepen te verwijderen in plaats van de waarschuwing te Thread.Abort onderdrukken.

    void MyMethod()
    {
    #pragma warning disable SYSLIB0006
        Thread.CurrentThread.Abort();
    #pragma warning restore SYSLIB0006
    }
    

    U kunt de waarschuwing ook onderdrukken in het projectbestand.

    <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Disable "Thread.Abort is obsolete" warnings for entire project. -->
      <NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
    </PropertyGroup>
    

Betrokken API's