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 |