[C# 문법] Task 클래스를 이용한 비동기 처리 방법
- C#/C# 문법
- 2022. 1. 16. 17:42
소개
- 안녕하세요. 오늘은 C# 문법에서 비동기 처리하는 방법에 대한 기초를 공부해 보려고 합니다.
- 우선 그 첫 번째로, Task 클래스를 이용한 비동기 처리 방법에 대해서 알려 드리겠습니다.
준비 과정
- 첫 번째로, 윈폼 프로젝트를 생성합니다.
- 그리고 Button, Label 2개의 컨트롤을 다음과 같이 배치합니다.
- 마지막으로 아래와 같이 코드를 작성합니다.
- 아래 프로그램을 실행시키면, Button 컨트롤을 클릭하는 동안 프로그램의 마우스가 빙빙 돌면서 Work() 메서드 작업이 끝날때 까지 다른 작업을 할 수 없게 됩니다.
- 즉, 프로그램이 "응답없음" 상태가 되어 버리는 점입니다.
- 이제 Task 클래스를 이용하여, 해당 부분을 비동기 처리하여 Work() 메서드가 동작하더라도 다른 동작을 할 수 있도록 예제 코드를 수정해 보도록 하겠습니다.
using System;
using System.Threading;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void uiBtn_Test_Click(object sender, EventArgs e)
{
uiLb_Test.Text = string.Empty;
Cursor = Cursors.WaitCursor;
Work();
uiLb_Test.Text = "종료";
Cursor = Cursors.Arrow;
}
private void Work()
{
Thread.Sleep(2000);
int sum = 0;
for(int index = 0; index < 10000; index++)
{
sum += index;
}
}
}
}
Task 클래스 이용한 비동기 처리
- Task 클래스는 .NET Framework 4.0 부터 도입된 개념입니다.
- Thread 클래스를 대체할 수 있는 녀석인데요. Thread 클래스를 사용했을 때는 스레드를 생성, 삭제 하는데 비용이 드는 문제가 있었습니다.
- 하지만, Task 클래스는 그 문제를 해소함과 동시에 더욱 수준 높은 기능들을 제공합니다.
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void uiBtn_Test_Click(object sender, EventArgs e)
{
uiLb_Test.Text = string.Empty;
Task.Run(() => Work());
}
private void Work()
{
Thread.Sleep(2000);
int sum = 0;
for(int index = 0; index < 10000; index++)
{
sum += index;
}
uiLb_Test.Text = "종료";
}
}
}
- 위와 같이 Task.Run 메서드에서 Work 메서드를 비동기로 호출합니다.
- 때문에, Button 클릭이 이루어 지고 Work 함수가 끝나지 않았음에도 프로그램 제어권은 살아 있고 다른 동작들을 처리할 수 있습니다.
728x90
'C# > C# 문법' 카테고리의 다른 글
[C# 활용] String, StringBuilder 성능 차이 (0) | 2022.02.08 |
---|---|
[C# 문법] LINQ SelectMany 연산자 (0) | 2022.01.20 |
[C# 문법] C# 프로세스 시작하기, 끝내기, 기다리기 (0) | 2022.01.16 |
[C# NuGet] C# SmartEnum 이란? (8) | 2022.01.15 |
[C# NuGet] Topshelf 이란? (0) | 2022.01.11 |
이 글을 공유하기