■ Task 클래스를 사용해 모든 태스크 종료시까지 대기하는 방법을 보여준다.
▶ Program.cs
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 80 81 82 83 84 |
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace TestProject { /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 값 구하기 (비동기) - GetValueAsync(source) /// <summary> /// 값 구하기 (비동기) /// </summary> /// <param name="source">소스 값</param> /// <returns>값 태스크</returns> private static async Task<int> GetValueAsync(int source) { await Task.Delay(TimeSpan.FromSeconds(source)); return source; } #endregion #region 태스크 실행하기 (비동기) - ExecuteTaskAsync(task) /// <summary> /// 태스크 실행하기 (비동기) /// </summary> /// <param name="task">태스크</param> /// <returns>태스크</returns> private static async Task ExecuteTaskAsync(Task<int> task) { int result = await task; Console.WriteLine(result); } #endregion #region 태스크 처리하기 (비동기) - ProcessTaskAsync() /// <summary> /// 태스크 처리하기 (비동기) /// </summary> /// <returns>태스크</returns> private static async Task ProcessTaskAsync() { Task<int> task1 = GetValueAsync(2); Task<int> task2 = GetValueAsync(3); Task<int> task3 = GetValueAsync(1); Task<int>[] sourceTaskArray = new[] { task1, task2, task3 }; IEnumerable<Task> taskEnumerable = from task in sourceTaskArray select ExecuteTaskAsync(task); Task[] targetTaskArray = taskEnumerable.ToArray(); await Task.WhenAll(targetTaskArray); } #endregion #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> /// <returns>태스크</returns> private async static Task Main() { await ProcessTaskAsync(); } #endregion } } |