SYSLIB0006:不支援 Thread.Abort
從 .NET 5 開始,下列 API 會標示為已淘汰。 使用這些 API 會在編譯時期產生警告 SYSLIB0006
,並且在執行階段產生警告 PlatformNotSupportedException。
當您呼叫 Thread.Abort 以中止目前執行緒以外的執行緒時,您不知道當擲回 ThreadAbortException 時,什麼程式碼已執行或無法執行。 您也無法確定應用程式的狀態,或是任何負責保留的應用程式和使用者狀態。 例如,呼叫 Thread.Abort 可能會阻止執行靜態建構函式,或釋放受控或非受控資源。 因此,Thread.Abort 一律會在 .NET Core 和 .NET 5+ 上擲回 PlatformNotSupportedException。
因應措施
使用 CancellationToken 來中止工作單位的處理,而不是呼叫 Thread.Abort。 下列範例示範如何使用 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);
}
}
隱藏警告
若您必須使用已淘汰的 API,您可以在程式碼或專案檔中隱藏警告。
若要只隱藏單一違規,請將前置處理器指示詞新增至原始程式碼檔案,以停用並重新啟用警告。
// Disable the warning.
#pragma warning disable SYSLIB0006
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0006
若要隱藏專案中的所有 SYSLIB0006
警告,請將 <NoWarn>
屬性新增至專案檔。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
</PropertyGroup>
</Project>
如需詳細資訊,請參閱隱藏警告。