■ Task<T> 클래스의 ContinueWith 메소드를 사용하는 방법을 보여준다.
▶ 예제 코드 (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 |
using System; using System.Threading; using System.Threading.Tasks; ... #region 테스트 1 처리하기 - Test1(taskName, secondCount) /// <summary> /// 테스트 1 처리하기 /// </summary> /// <param name="taskName">태스크명</param> /// <param name="secondCount">초 카운트</param> /// <returns>스레드 ID</returns> private static int Test1(string taskName, int secondCount) { int threadID = Thread.CurrentThread.ManagedThreadId; bool isThreadPoolThread = Thread.CurrentThread.IsThreadPoolThread; Console.WriteLine ( "[{0}] 스레드 ID : {1}, 스레드 풀 스레드 여부 : {2}", taskName, threadID, isThreadPoolThread ); Thread.Sleep(TimeSpan.FromSeconds(secondCount)); return threadID; } #endregion #region 테스트 2 처리하기 - Test2(taskName, precedingTask) /// <summary> /// 테스트 2 처리하기 /// </summary> /// <param name="taskName">태스크명</param> /// <param name="precedingTask">선행 태스크</param> private static void Test2(string taskName, Task<int> precedingTask) { int threadID = Thread.CurrentThread.ManagedThreadId; bool isThreadPoolThread = Thread.CurrentThread.IsThreadPoolThread; Console.WriteLine ( "[{0}] 선행 태스크 스레드 ID : {1}, 스레드 ID : {2}, 스레드 풀 스레드 여부 : {3}", taskName, precedingTask.Result, threadID, isThreadPoolThread ); } #endregion ... Task<int> task1 = new Task<int>(() => Test1("태스크 #1", 3)); Task<int> task2 = new Task<int>(() => Test1("태스크 #2", 2)); task1.ContinueWith(t => Test2("태스크 #3", t), TaskContinuationOptions.OnlyOnRanToCompletion); task2.ContinueWith(t => Test2("태스크 #4", t), TaskContinuationOptions.OnlyOnRanToCompletion); task1.Start(); task2.Start(); Thread.Sleep(TimeSpan.FromSeconds(4)); Console.WriteLine("작업을 완료했습니다."); |