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
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] ServiceController 클래스 : 윈도우즈 서비스 시작하기 (0) | 2016.06.12 |
---|---|
[C#/COMMON] EventLog 클래스 : 이벤트 로그 사용하기 (0) | 2016.06.12 |
[C#/COMMON] 쓰기/읽기 작업을 비동기 순차 처리하기 (0) | 2016.06.09 |
[C#/COMMON] Timer 클래스 사용하기 (0) | 2016.06.04 |
[C#/COMMON] ThreadPool 클래스 : RegisterWaitForSingleObject 메소드를 사용해 타임아웃 사용하기 (0) | 2016.06.04 |
[C#/COMMON] ThreadPool 클래스 : 비동기 호출하기 (0) | 2016.06.04 |
[C#/COMMON] 대리자를 사용해 비동기 호출하기 (0) | 2016.06.04 |
[C#/COMMON] 파일 경로 배열 구하기 (0) | 2016.06.01 |
[C#/COMMON] 파일 복사하기 (중복 파일 존재시 순번 추가) (0) | 2016.06.01 |
[C#/COMMON] Stream 클래스 : 스트림 복사하기 (0) | 2016.06.01 |
댓글을 달아 주세요