반응형
        public static void TaskTest()
        {
            Console.WriteLine("========= Task start =========");

            Task.Run(() => IniniteFunction());

            // LongRunning 옵션을 사용하여 Threadpool이 아닌 별도의 Thread에서 동작되도록함
            Console.WriteLine("Task1 start");
            Task task1 = new Task(IniniteFunction, TaskCreationOptions.LongRunning);
            task1.Start();

            // async로 동작
            Console.WriteLine("Task2 start");
            Task.Run(() => Function2(5, 7));

            // wait를 사용하거나 Result를 사용시 Sync로 동작되며 소요되는 시간만큼 기다리게됨
            Console.WriteLine("Task3 start");
            Task<string> task3 = Task.Run(() => Function2(5, 7));
            task3.Wait();
            Console.WriteLine(task3.Result);

            // async로 동작되지만 완료 이벤트에서 결과 확인이 가능함
            Console.WriteLine("Task4 start");
            Task<string> task4 = Task.Run(() => Function2(5, 7));
            task4.GetAwaiter().OnCompleted(() =>
            {
                Console.WriteLine("Task4 Done");
                Console.WriteLine(task4.Result);
            });

            Console.WriteLine("========= Task End =========");
        }

        private static void IniniteFunction()
        {
            int num = 0;

            while (true)
            {
                Thread.Sleep(10);
                num++;
            }
        }

        private static string Function2(int v1, int v2)
        {
            Thread.Sleep(3000);
            int sum = v1 + v2;
            
            return $"Function2 result : v1 : {v1} , v2 : {v2} , sum : {sum}";
        }

반응형

+ Recent posts