>백엔드 개발 >C++ >C#에서 TPL 작업을 올바르게 중단하거나 취소하는 방법은 무엇입니까?

C#에서 TPL 작업을 올바르게 중단하거나 취소하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-25 02:36:09122검색

How to Properly Abort or Cancel TPL Tasks in C#?

TPL 작업 중단/취소

멀티 스레드 프로그래밍에서 .Abort() 메서드를 사용하여 스레드가 종료되면 해당 스레드 내에서 생성된 작업이 계속 실행되어 예기치 않은 동작이 발생할 수 있습니다. 이 문서에서는 TPL(작업 병렬 라이브러리) 작업을 중단하거나 취소하는 올바른 방법을 설명합니다.

TPL 작업은 스레드 풀의 백그라운드 스레드에서 실행되며 직접 중단할 수 없습니다. 권장되는 접근 방식은 취소 태그를 사용하는 것입니다.

취소 마커는 작업 실행을 중지하라는 신호를 보내는 방법을 제공합니다. 이렇게 하려면:

  1. CancellationTokenSource를 생성합니다.
  2. 소스에서 CancellationToken을 가져옵니다.
  3. 작업 생성자 또는 .WithCancellation() 메서드를 통해 CancellationToken을 작업에 전달합니다.
  4. 작업을 중단해야 하는 경우 CancellationTokenSource에서 Cancel()을 호출하세요.

다음 코드 예제에서는 이 접근 방식을 보여줍니다.

<code class="language-csharp">class Program
{
    static void Main()
    {
        var cts = new CancellationTokenSource();
        CancellationToken ct = cts.Token;
        Task.Factory.StartNew(() =>
        {
            while (!ct.IsCancellationRequested)
            {
                // 执行一些繁重的工作
                Thread.Sleep(100);
                // 检查取消请求
                if (ct.IsCancellationRequested)
                {
                    Console.WriteLine("任务已取消");
                    break;
                }
            }
        }, ct);

        // 模拟等待任务完成 3 秒
        Thread.Sleep(3000);

        // 无法再等待 => 取消此任务
        cts.Cancel();
        Console.ReadLine();
    }
}</code>

이 수정된 예에서는 더 나은 가독성과 명확성을 위해 !ct.IsCancellationRequested 루프 조건에서 while를 사용하여 루프 내에서 취소 요청을 직접 확인하며 핵심 기능은 동일하게 유지되어 작업 취소를 처리하는 깔끔하고 효율적인 방법을 제공합니다. .

위 내용은 C#에서 TPL 작업을 올바르게 중단하거나 취소하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.