■ 태스크 취소 옵션을 사용하는 방법을 보여준다.
▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
using System; using System.Threading; using System.Threading.Tasks; ... #region 테스트 처리하기 - Test(taskName, secondCount, cancellationToken) /// <summary> /// 테스트 처리하기 /// </summary> /// <param name="taskName">태스크명</param> /// <param name="secondCount">초 카운트</param> /// <param name="cancellationToken">취소 토큰</param> /// <returns>처리 결과</returns> private int Test(string taskName, int secondCount, CancellationToken cancellationToken) { Console.WriteLine ( "[{0} 스레드] 태스크명 : {1}, 스레드 풀 스레드 여부 : {2}", Thread.CurrentThread.ManagedThreadId, taskName, Thread.CurrentThread.IsThreadPoolThread ); for(int i = 0; i < secondCount; i ++) { Thread.Sleep(TimeSpan.FromSeconds(1)); if(cancellationToken.IsCancellationRequested) { return -1; } } return secondCount; } #endregion ... CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); Task<int> task = new Task<int>(() => Test("태스크 1", 10, cancellationTokenSource.Token), cancellationTokenSource.Token); Console.WriteLine("태스크 상태 : {0}", task.Status); cancellationTokenSource.Cancel(); Console.WriteLine("태스트 상태 : {0}", task.Status); Console.WriteLine("첫번째 태스크가 실행 전 취소되었습니다."); cancellationTokenSource = new CancellationTokenSource(); task = new Task<int>(() => Test("태스크 2", 10, cancellationTokenSource.Token), cancellationTokenSource.Token); task.Start(); for(int i = 0; i < 5; i++ ) { Thread.Sleep(TimeSpan.FromSeconds(0.5)); Console.WriteLine(task.Status); } cancellationTokenSource.Cancel(); for(int i = 0; i < 5; i++) { Thread.Sleep(TimeSpan.FromSeconds(0.5)); Console.WriteLine(task.Status); } Console.WriteLine("태스크가 완료되었습니다 : {0}.", task.Result); |