Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Thread.Abort APIs sind veraltet. Bei Projekten, die auf .NET 5 oder eine höhere Version abzielen, wird eine Kompilierungszeitwarnung SYSLIB0006
angezeigt, wenn diese Methoden aufgerufen werden.
Änderungsbeschreibung
Zuvor haben Aufrufe von Thread.Abort keine Kompilierungszeitwarnungen erzeugt, die Methode hat jedoch zur Laufzeit eine PlatformNotSupportedException ausgelöst.
Ab .NET 5 Thread.Abort ist als Warnung veraltet markiert. Durch Aufrufen dieser Methode wird eine Compilerwarnung erzeugt SYSLIB0006
. Die Implementierung der Methode ist unverändert, und sie wirft weiterhin ein PlatformNotSupportedException.
Grund für Änderung
Da Thread.Abort in allen .NET-Implementierungen außer .NET Framework immer eine PlatformNotSupportedException auslöst, wurde ObsoleteAttribute zur Methode hinzugefügt, um auf Stellen aufmerksam zu machen, an denen sie aufgerufen wird.
Wenn Sie Thread.Abort aufrufen, um einen anderen Thread als den aktuellen abzubrechen, wissen Sie nicht, welcher Code ausgeführt oder nicht ausgeführt wurde, wenn ThreadAbortException ausgelöst wird. Sie können auch nicht sicher sein, in welchem Zustand sich Ihre Anwendung oder irgendein Anwendungs- und Benutzerzustand befindet, für dessen Erhaltung sie verantwortlich ist. Beispielsweise kann das Aufrufen Thread.Abort die Ausführung statischer Konstruktoren oder die Veröffentlichung von verwalteten oder nicht verwalteten Ressourcen verhindern. Aus diesem Grund löst Thread.Abort in .NET Core und .NET 5 und höher immer eine PlatformNotSupportedException aus.
Eingeführte Version
5.0
Empfohlene Aktion
Verwenden Sie eine CancellationToken Zum Abbrechen der Verarbeitung einer Arbeitseinheit anstelle des Aufrufens Thread.Abort. Das folgende Beispiel veranschaulicht die Verwendung von 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); } }
Weitere Informationen finden Sie unter "Abbruch" in verwalteten Threads.
Um die Kompilierungszeitwarnung zu unterdrücken, unterdrücken Sie den Warnungscode
SYSLIB0006
. Der Warnungscode ist spezifisch für Thread.Abort und es zu unterdrücken unterdrückt nicht andere Veraltungswarnungen in Ihrem Code. Wir empfehlen jedoch, dass Sie Aufrufe zu Thread.Abort entfernen, anstatt die Warnung zu unterdrücken.void MyMethod() { #pragma warning disable SYSLIB0006 Thread.CurrentThread.Abort(); #pragma warning restore SYSLIB0006 }
Sie können die Warnung auch in der Projektdatei unterdrücken.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "Thread.Abort is obsolete" warnings for entire project. --> <NoWarn>$(NoWarn);SYSLIB0006</NoWarn> </PropertyGroup>