less than 1 minute read

CancellationTokenSource 이란

작업의 가능한 취소를 처리하기 위해 예제에서는 개체에 전달되는 취소 토큰을 생성하는 개체를 TaskFactory 인스턴스화 CancellationTokenSource 합니다. 개체는 TaskFactory 취소 토큰을 특정 계측에 대한 판독값 수집을 담당하는 각 작업에 전달합니다.


예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;
TaskFactory factory = new TaskFactory(token);

// when
bool itShouldNotBeTrue = false;

factory.StartNew(async () =>
{
	Console.WriteLine("Task Start");
	await Task.Delay(1000);
	// if (cancelSource.Token.IsCancellationRequested)
	// {
	//     return;
	// }
	await Task.Delay(1000);
	itShouldNotBeTrue = true;
	Console.WriteLine("Task End : " + itShouldNotBeTrue.ToString());
}, source.Token);
Thread.Sleep(100);
source.Cancel();
Console.WriteLine("Task Cancel : " + itShouldNotBeTrue.ToString());
Thread.Sleep(3000);

예제 설명

위의 코드에 대한 결과값은 아래와 같다.

1
2
3
Task Start
Task Cancel : False
Task End : True

해결 방법

source.Token을 사용하면 factory.StartNew로 실행한 스레드를 다 실행하는것을 확인 할 수 있다. 따라서 아래와 같이 Task.Delay()에서 CancellationTokenSource을 인식 할 수 있도록 해야 한다.

1
await Task.Delay(1000, token); 

Tags:

Categories:

Source File: 2022-12-11-how-to-use-candellation-token-source.md

Updated:

Comments