C#

[C#] - 2개의 작업을 병렬로, 비동기 처리 WhenAll vs WaitAll

Riucc 2019. 4. 9. 14:55

○ 2개의 작업을 병렬로, 비동기 처리 WhenAll vs WaitAll

 

- Task.WaitAll : 지정한 Task가 작업이 완료될 때까지 쓰레드를 블로킹(막는다)

     ex) Task.WaitAll(task3, task5)  // 2개 이상도 가능

- Task.WhenAll : 지정한 Task가 작업이 완료될 때까지 대기하지 않고 다른 Task들을 수행

     ex) await Task.WhenAll(task3, task5);


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
namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            DoAsyncTask();
            taskDateTime();
            Console.ReadLine();
        }
 
        static async Task taskDateTime()
        {
            Task<string> taskInt = new Task<string>(
                () =>
                {
                    string date = DateTime.Now.ToLongTimeString();
                    return date;
                });
            taskInt.Start();
            Thread.Sleep(2000);
            taskInt.Wait();
            Console.WriteLine("현재시간 : " + taskInt.Result);
        }
 
        private static Task<int> Method3Async()
        {
            return Task.Factory.StartNew(() =>
            {
                Thread.Sleep(3000);
                return 3;
            });
        }
        private static Task<int> Method5Async()
        {
            return Task.Factory.StartNew(() =>
            {
                Thread.Sleep(5000);
                return 5;
            });
        }
 
        private static async void DoAsyncTask()
        {
            var task3 = Method3Async();
            var task5 = Method5Async();
 
            await Task.WhenAll(task3, task5);
 
            Console.WriteLine(task3.Result + task5.Result);
        }
    }
}
cs