Language/C#

C#에서 비동기 프로그래밍 이해하기 - Task와 async/await의 활용

범데이 2024. 10. 26. 21:22
728x90
await doAsync();...

public async void doAsync() {...}
public async Task doAsync() {...}

 

 

1. Task란?

C#에서 Task는 비동기 작업을 나타내는 클래스이다. .NET의 비동기 프로그래밍을 지원하는 핵심 요소 중 하나로, 백그라운드 스레드에서 작업을 수행하거나 I/O 바운드 작업을 비차단 방식으로 처리할 수 있게 도와준다. Task클래스는 다음과 같은 역할을 한다.

 

- 비동기 작업을 표현: 백그라운드에서 실행되는 작업을 나타내며 작업의 시작 및 완료 여부를 추적할 수 있다.

- 작업 생명주기 관리: 작업의 상태를 관리하고 완료된 작업의 결과를 반환할 수 있다.

- 결과 반환 기능: 작업 결과를 반환해야 하는 경우 Task<T> 형식을 사용하여 비동기 작업이 완료되면 결과를 얻을 수 있다.

 

// 결과를 반환하지 않는 비동기 작업
async Task MyAsyncTaskMethod()
{
	// 비동기 작업 수행
}

// 결과를 반환하는 비동기 작업
async Task<int> MyAsyncTaskMethodWithResult()
{
	// 비동기 작업 수행
	return 42;
}

 

 

 

2. async 키워드

C#에서 비동기 메서드는 async 키워드를 사용해 정의하며, 주로 Task 타입과 함께 사용된다.

async 메서드는 호출된 스레드를 차단하지 않고 비동기 작업을 수행하여, 특히 UI가 멈추거나 다른 작업이 방해받지 않도록 한다.

 

- Task: 비동기 작업이 완료되면 결과를 반환하지 않음을 나타낸다.

- Task<T>: 비동기 작업이 완료되면 T 타입의 결과를 반환함을 나타낸다.

 

async Task RunTaskExample()
{
	Console.WriteLine("비동기 작업 시작");
    await Task.Delay(2000); // 비동기 작업 시뮬레이션
    Console.WriteLine("비동기 작업 완료");
}

 

 

 

3. await 키워드

await 키워드는 Task 또는 Task<T> 의 완료를 비동기적으로 기다린다. 이때 호출 스레드를 차단하지 않으며, 비동기 작업이 완료될 때까지 대기할 수 있다.

 

using System;
using System.Threading.Tasks;

class Program
{
	static async Task Main()
    {
    	await MyAsyncMethod();
        Console.WriteLine("Main 메서드는 MyAsyncMethod가 비동기로 실행되는 동안 계속됩니다.");
    }
    
    static async Task MyAsyncMethod()
    {
    	Console.WriteLine("MyAsyncMethod가 시작됩니다.");
        await Task.Delay(2000); // 비동기 작업 시뮬레이션 (예: I/O 또는 네트워크 호출)
        Console.WriteLine("MyAsyncMethod가 완료되었습니다.");
    }
}

 

 

요약

비동기 메서드와 Task를 사용하는 비동기 프로그래밍은 스레드를 차단하지 않고 작업을 처리할 수 있게 하며, 특히 실행 시간이 긴 작업에 적합하다. asyncawait는 C#에서 명확하고 효율적인 비동기 워크플로우를 구현할 수 있도록 지원한다.

 

 

 


#References

https://learn.microsoft.com/ko-kr/dotnet/csharp/asynchronous-programming/

https://learn.microsoft.com/ko-kr/dotnet/api/system.threading.tasks.task?view=net-8.0

https://tsyang.tistory.com/112

https://da-new.tistory.com/214

https://wjunsea.tistory.com/138

https://kangworld.tistory.com/25

 

 

 

 

 

 

반응형