从 .NET 5 开始,以下 API 标记为已过时。 使用这些 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>
有关详细信息,请参阅 禁止显示警告。