[TIL] 25.01.23 THU

GDORI·2025년 1월 23일
0

TIL

목록 보기
169/184
post-thumbnail

C# 비동기 및 병렬 처리

C#에서 비동기, 병렬 처리하는 방법으로 Task, Parallel, async/await 이 있다.
async/await의 경우 Node.js에서 많이 다뤘기 때문에 익숙하지만 나머지 두 놈은 익숙치 않다.

Task

Task는 비동기 작업을 나타내는 클래스로 C#에서 비동기 작업을 처리하는 주된 방식은 Task를 사용하는 것이다. Task는 비동기 작업을 추상화한 객체로 작업이 완료될 때 결과를 반환하거나 예외를 처리할 수 잇다. 비동기 메서드에서는 TaskTask<T>를 반환 타입으로 사용한다.

public async Task<string> FetchDataAsync()
{
    // 비동기적으로 데이터를 가져오는 작업 (예: 웹 요청)
    await Task.Delay(2000); // 예시: 2초 지연
    return "데이터 완료!";
}

Task.WhenAll()을 사용하면 비동기 작업을 병렬적으로 실행하고 모든 작업이 완료되면 결과를 반환한다.
Node.js 에서 PromisePromise.all 과 같은 기능인 것 같다.

public async Task RunMultipleTasksAsync()
{
    Task task1 = Task.Delay(1000); // 1초 지연
    Task task2 = Task.Delay(2000); // 2초 지연
    await Task.WhenAll(task1, task2); // 두 작업이 끝날 때까지 기다림
    Console.WriteLine("모든 작업 완료");
}

Parallel

Parallel 클래스는 CPU 집약적인 작업을 병렬로 실행하는데 사용되며 여러 프로세서 코어를 활용해 반복문에서 작업을 병렬로 처리하는 데에 적합하다.
여러스레드에서 병렬로 처리하여 성능을 개선할 수 있다. 따라서 수치 계산이나 데이터 처리, 이미지 처리를 하는 등의 작업에서 성능 향상을 기대할 수 있다.

public void ProcessDataInParallel()
{
    // 0부터 9까지 병렬로 작업 처리
    Parallel.For(0, 10, i =>
    {
        Console.WriteLine($"작업 {i} 완료");
        Task.Delay(500); // 작업 지연
    });
}
profile
하루 최소 1시간이라도 공부하자..

0개의 댓글

관련 채용 정보