본문 바로가기
개발언어/C#

[C#] Task.Run()

by 창용이랑 2023. 5. 12.
728x90

- 샘플1 (Console)

using System;
using System.Threading;
using System.Threading.Tasks;

namespace tstAsyncConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Before");

            int result = 0;
            var task1 = Task.Run(() => { result = LongCalc(10); });
            task1.Wait();
            Console.WriteLine(result.ToString());

            Console.WriteLine("After");
            Console.ReadKey();
        }
		
        static int LongCalc(int n)
        {
            int result = 0;
            for (int i = 0; i < n; i++)
            {
                result += i;
                Console.WriteLine(i + 1);
                Thread.Sleep(100);
            }
            return result;
        }

	}
}

 

- 샘플2(Form)

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace tstTst
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "Before";
            Run();  //UI Thread에서 실행
            label1.Text = "After";
        }

        private async Task Run()
        {
            // 비동기로 Worker Thread에서 도는 task1
            // Task.Run(): .NET Framework 4.5+
            var task1 = Task.Run(() => LongCalcAsync(2));

            // task1이 끝나길 기다렸다가 끝나면 결과치를 sum에 할당
            int sum = await task1;

            // UI Thread 에서 실행
            // Control.Invoke 혹은 Control.BeginInvok 필요없음
            label1.Text = "Sum = " + sum;
            button1.Enabled = true;
        }

        private int LongCalcAsync(int times)
        {
            int result = 0;
            for (int i = 0; i < times; i++)
            {
                result += i;
                Thread.Sleep(1000);
            }
            return result;
        }
    }
}

 

출처 : https://blog.naver.com/lsunday/222528774010

 

 

'개발언어 > C#' 카테고리의 다른 글

[C#] Task.WhenAll() vs WhenAny()  (0) 2023.05.12
[C#] Task.Run() vs Task.Factory.StartNew()  (0) 2023.05.12
[C#] Task.Wait() vs await Task  (0) 2023.05.12
[C#] 비동기 async / await 키워드  (0) 2023.05.12
[C#] USB상태 변경시  (0) 2023.05.10