SYSLIB0006:不支持 Thread.Abort

从 .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>

有关详细信息,请参阅 禁止显示警告

另请参阅