以下 API 從 .NET 5 起被標記為過時。 使用這些 API 會在編譯時產生警告,執行SYSLIB0006時也會產生警告PlatformNotSupportedException。
當你呼叫 Thread.Abort 來中止不是目前執行緒的其他執行緒時,在拋出 ThreadAbortException 時,哪些程式碼已執行或未執行並不明確。 你也無法確定你的應用程式或任何它負責保存的應用程式和使用者狀態的狀態。 例如,呼叫 Thread.Abort 可能會阻止靜態建構子的執行,或釋放受管理或非受管理資源。 因此,Thread.Abort 總是會在 .NET Core 和 .NET 5+ 上丟出PlatformNotSupportedException。
因應措施
使用 a 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>
如需詳細資訊,請參閱隱藏警告。