본문 바로가기

프로그래밍언어/C#

[C#] 동시성 프로그래밍_Task.WhenAny

- 일련의 작업을 입력받고, 입력받은 작업 중 하나를 완료하면, 완료된 작업을 반환

 

        public static string Run1()
        {
            StringBuilder sb = new StringBuilder();
            for (var i = 0; i <= 3; i++) {
                sb.AppendLine(String.Format("Task1 {0}", i));
            };

            return sb.ToString(); 
        }

        public static string Run2()
        {
            StringBuilder sb = new StringBuilder();
            for (var i = 0; i <= 300; i++) {
                sb.AppendLine(String.Format("Task2 {0}", i));
            };

            return sb.ToString(); 
        }

        public static async void WaitWhanAnyTask()
        {
        	// 동시에 두 개의 task 시작
            Task<string> task2 = Task.FromResult(AsyncTest.Run2());
            Task<string> task1 = Task.FromResult(AsyncTest.Run1());

            try {
            	// 두 개의 작업 중 하나의 완료를 기다린다. 
                Task<string> results = await Task.WhenAny(task2, task1);
                Console.WriteLine(results.Result);
            }
            catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }

        }

- 결과