SYSLIB0006: Thread.Abort는 지원되지 않습니다.
다음 API는 .NET 5부터 사용되지 않는 것으로 표시됩니다. 이러한 API를 사용하면 컴파일 시간에 경고 SYSLIB0006
이 생성되고 런타임에 PlatformNotSupportedException이 생성됩니다.
현재 스레드가 아닌 다른 스레드를 중단하기 위해 Thread.Abort를 호출하는 경우 ThreadAbortException이 throw될 때 실행되었거나 실행하지 못한 코드를 알 수 없습니다. 또한 애플리케이션의 상태 또는 유지를 담당하는 애플리케이션 및 사용자 상태를 확신할 수 없습니다. 예를 들어 Thread.Abort를 호출하면 정적 생성자가 실행되거나 관리되거나 관리되지 않는 리소스가 해제되지 않을 수 있습니다. 이러한 이유로 Thread.Abort는 항상 .NET Core 및 .NET 5 이상에서 PlatformNotSupportedException을 throw합니다.
해결 방법
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>
자세한 내용은 경고 표시 안 함을 참조하세요.
참고 항목
.NET