Sdílet prostřednictvím


Zastaralá metoda Thread.Abort

Rozhraní Thread.Abort API jsou zastaralá. Projekty, které cílí na .NET 5 nebo novější verzi, narazí na upozornění SYSLIB0006 v době kompilace, pokud se tyto metody volají.

Změna popisu

Dříve volání, která Thread.Abort nevytvářela upozornění v době kompilace, ale metoda vyvolá PlatformNotSupportedException za běhu.

Počínaje verzí .NET 5 Thread.Abort je označený jako upozornění. Volání této metody vytvoří upozornění SYSLIB0006kompilátoru . Implementace metody je nezměněna a pokračuje v vyvolání PlatformNotSupportedException.

Důvod změny

Vzhledem k tomu, že Thread.Abort vždy vyvolává PlatformNotSupportedException všechny implementace .NET s výjimkou rozhraní .NET Framework, ObsoleteAttribute byla přidána do metody, aby upoutat pozornost na místa, kde je volána.

Když zavoláte Thread.Abort přerušení vlákna jiného než aktuálního vlákna, nevíte, jaký kód se spustil nebo se nepodařilo provést při ThreadAbortException vyvolání. Také nemůžete mít jistotu o stavu vaší aplikace nebo žádné aplikace a stavu uživatele, za které odpovídá za zachování. Volání Thread.Abort může například zabránit spuštění statických konstruktorů nebo uvolnění spravovaných nebo nespravovaných prostředků. Z tohoto důvodu Thread.Abort vždy vyvolá výjimku PlatformNotSupportedException pro .NET Core a .NET 5 nebo novější.

Zavedená verze

5,0

  • CancellationToken Použití k přerušení zpracování jednotky práce místo volání Thread.Abort. Následující příklad ilustruje použití 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);
        }
    }
    

    Další informace najdete v tématu Zrušení ve spravovaných vláknech.

  • Chcete-li potlačit upozornění v době kompilace, potlačit kód SYSLIB0006upozornění . Kód upozornění je specifický pro Thread.Abort a potlačuje ho, ale nepotlačí další upozornění na obsoletion ve vašem kódu. Místo potlačení upozornění však doporučujeme odebrat volání Thread.Abort .

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

    Upozornění v souboru projektu můžete také potlačit.

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

Ovlivněná rozhraní API