DevSight

C# Concurrency with IProgress

C#은 동시성(Concurrency) 구현을 쉽게 할 수 있는데 이번 글에서 여러 개의 비동기 함수를 병렬처리 형태로 구현해 보는 예제를 살펴볼 것이다.

Concurrency 방식과 Parallel 방식의 비교1는 이전 글인 Concurrency in C# Example에서 살펴보았다.

아래의 예제처럼 각 1초, 2초, 3초를 소요하는 비동기 방식의 함수가 3개 있다고 가정하고 IProgress 또는 리턴값을 처리한다고 하면 총 6초가량이 걸리게 된다.

1
2
3
4
5
6
async Task Main()
{
    string returnValue1 = await ProgressA(); //1초
    string returnValue2 = await ProgressB(); //2초
    string returnValue3 = await ProgressC(); //3초 : 총 6초
}

위의 예제를 아래처럼 Concurrency를 사용하면 총 3초가 소요되는 병렬처리가 가능하다.2

Concurrency 예제
Read More ···