Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Thread.Abort API-k elavultak. A .NET 5-ös vagy újabb verzióját megcélzott projektek fordítási időre vonatkozó figyelmeztetést SYSLIB0006 kapnak, ha ezek a metódusok meghívásra kerülnek.
Módosítás leírása
Korábban a Thread.Abort hívások nem eredményeztek fordítási időbeli figyelmeztetéseket, azonban a metódus futásidőben PlatformNotSupportedException-t dobott.
A .NET 5-től kezdődően Thread.Abort elavultként van megjelölve, és figyelmeztetést generál. Ennek a metódusnak a meghívása fordítási figyelmeztetést SYSLIB0006eredményez. A módszer megvalósítása nem változik, és továbbra is dob egy PlatformNotSupportedException hibaüzenetet.
A változás oka
Mivel a Thread.Abort .NET-keretrendszer kivételével mindig minden PlatformNotSupportedException .NET-implementációra hatással van, ObsoleteAttribute a rendszer hozzáadta a metódust, hogy felhívja a figyelmet azokra a helyekre, ahol meghívják.
Amikor az aktuális száltól eltérő szál megszakítására hívja meg a hívást Thread.Abort , nem tudja, hogy milyen kódot hajtottak végre, vagy nem sikerült végrehajtani a ThreadAbortException dobáskor. Nem lehetsz biztos az alkalmazás állapotában vagy bármely olyan állapotban, amelyet az alkalmazásnak és a felhasználónak meg kell őriznie. A hívás Thread.Abort például megakadályozhatja a statikus konstruktorok végrehajtását, illetve a felügyelt vagy nem felügyelt erőforrások kiadását. Ezért Thread.Abort mindig dob egy PlatformNotSupportedException-et a .NET Core-on és a .NET 5+-on.
Bevezetett verzió
5,0
Javasolt művelet
Használjon egy CancellationToken a munkaegység feldolgozásának megszakítására a Thread.Abort hívása helyett. Az alábbi példa szemlélteti a CancellationToken használatát.
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); } }További információ: Lemondás felügyelt szálakban.
A fordítási idő figyelmeztetésének letiltásához tiltsa le a figyelmeztető kódot
SYSLIB0006. A figyelmeztető kód konkrétan a Thread.Abort vonatkozik, és ennek elnyomása nem szünteti meg a kódban lévő egyéb elavulásra vonatkozó figyelmeztetéseket. Azonban javasoljuk, hogy a figyelmeztetés mellőzése helyett távolítsa el a Thread.Abort hívásokat.void MyMethod() { #pragma warning disable SYSLIB0006 Thread.CurrentThread.Abort(); #pragma warning restore SYSLIB0006 }A projektfájlban lévő figyelmeztetést is letilthatja.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "Thread.Abort is obsolete" warnings for entire project. --> <NoWarn>$(NoWarn);SYSLIB0006</NoWarn> </PropertyGroup>