첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170
using System;
using System.Threading;

...

#region 첫번째 테스트 처리하기 - Test1(cancellationToken)

/// <summary>
/// 첫번째 테스트 처리하기
/// </summary>
/// <param name="cancellationToken">취소 토큰</param>
private void Test1(CancellationToken cancellationToken)
{
    Console.WriteLine("첫번째 테스트 처리를 시작합니다...");

    for(int i = 0; i < 5; i++)
    {
        if(cancellationToken.IsCancellationRequested)
        {
            Console.WriteLine("첫번째 테스트 처리가 취소되었습니다.");

            return;
        }

        Thread.Sleep(TimeSpan.FromSeconds(1));
    }

    Console.WriteLine("첫번째 테스트 처리를 종료합니다...");
}

#endregion
#region 두번째 테스트 처리하기 - Test2(cancellationToken)

/// <summary>
/// 두번째 테스트 처리하기
/// </summary>
/// <param name="cancellationToken">취소 토큰</param>
private void Test2(CancellationToken cancellationToken)
{
    try
    {
        Console.WriteLine("두번째 테스트 처리를 시작합니다...");

        for(int i = 0; i < 5; i++)
        {
            cancellationToken.ThrowIfCancellationRequested();

            Thread.Sleep(TimeSpan.FromSeconds(1));
        }

        Console.WriteLine("두번째 테스트 처리를 종료합니다...");
    }
    catch(OperationCanceledException)
    {
        Console.WriteLine("두번째 테스트 처리가 취소되었습니다.");
    }
}

#endregion
#region 세번째 테스트 처리하기 - Test3(cancellationToken)

/// <summary>
/// 세번째 테스트 처리하기
/// </summary>
/// <param name="cancellationToken">취소 토큰</param>
private void Test3(CancellationToken cancellationToken)
{
    bool cancellationFlag = false;

    cancellationToken.Register(() => cancellationFlag = true);

    Console.WriteLine("세번째 테스트 처리를 시작합니다...");

    for(int i = 0; i < 5; i++)
    {
        if(cancellationFlag)
        {
            Console.WriteLine("세번째 테스트 처리가 취소되었습니다.");

            return;
        }

        Thread.Sleep(TimeSpan.FromSeconds(1));
    }

    Console.WriteLine("세번째 테스트 처리를 종료합니다...");
}

#endregion

...

using(CancellationTokenSource cancellationTokenSource = new CancellationTokenSource())
{
    CancellationToken cancellationToken = cancellationTokenSource.Token;

    ThreadPool.QueueUserWorkItem(_ => Test1(cancellationToken));

    Thread.Sleep(TimeSpan.FromSeconds(2));

    cancellationTokenSource.Cancel();
}

using(CancellationTokenSource cancellationTokenSource = new CancellationTokenSource())
{
    CancellationToken cancellationToken = cancellationTokenSource.Token;

    ThreadPool.QueueUserWorkItem(_ => Test2(cancellationToken));

    Thread.Sleep(TimeSpan.FromSeconds(2));

    cancellationTokenSource.Cancel();
}

using(CancellationTokenSource cancellationTokenSource = new CancellationTokenSource())
{
    CancellationToken cancellationToken = cancellationTokenSource.Token;

    ThreadPool.QueueUserWorkItem(_ => Test3(cancellationToken));

    Thread.Sleep(TimeSpan.FromSeconds(2));

    cancellationTokenSource.Cancel();
}

Thread.Sleep(TimeSpan.FromSeconds(2));
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요