본문 바로가기

C#

C#에서 동기 처리와 비동기 처리로 숫자 배열의 합 계산하기

반응형

코드의 성능과 응답성은 모든 애플리케이션에서 중요한 요소입니다. 특히 대규모 데이터를 처리하는 경우, 작업을 효율적으로 처리하는 방법이 필요합니다. 이번에는 C#에서 동기 처리와 비동기 처리를 사용하여 숫자 배열의 합을 계산하는 방법에 대해 알아보겠습니다.

동기적 처리 (Synchronous Processing)

먼저 동기적 처리를 살펴보겠습니다. 동기적 처리는 코드가 순차적으로 실행되며, 한 작업이 완료될 때까지 다음 작업을 기다립니다. 이를 통해 직관적인 코드를 작성할 수 있지만, 대규모 데이터를 처리할 때는 성능 저하가 발생할 수 있습니다.

using System;

class Program
{
    static void Main(string[] args)
    {
        int[] numbers = { 1, 2, 3, 4, 5 };
        int sum = CalculateSum(numbers);
        Console.WriteLine("동기적 처리 결과: " + sum);
    }

    static int CalculateSum(int[] numbers)
    {
        int sum = 0;
        foreach (int num in numbers)
        {
            sum += num;
        }
        return sum;
    }
}

위 코드에서는 CalculateSum 함수를 사용하여 숫자 배열의 합을 계산합니다. 하지만 이 코드는 배열의 크기가 커지면 성능 문제가 발생할 수 있습니다.

 

비동기적 처리 (Asynchronous Processing)

비동기 처리는 대개 I/O 작업이나 장기 실행 작업에서 사용됩니다. 비동기 처리를 통해 여러 작업을 동시에 실행하고, 작업이 완료될 때까지 대기하지 않고 다른 작업을 수행할 수 있습니다.

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        int[] numbers = { 1, 2, 3, 4, 5 };
        int sum = await CalculateSumAsync(numbers);
        Console.WriteLine("비동기적 처리 결과: " + sum);
    }

    static async Task<int> CalculateSumAsync(int[] numbers)
    {
        int sum = 0;
        foreach (int num in numbers)
        {
            // 장시간 소요되는 작업을 시뮬레이션하기 위해 잠시 대기합니다.
            await Task.Delay(100);
            sum += num;
        }
        return sum;
    }
}

위 코드에서는 CalculateSumAsync 함수를 사용하여 비동기적으로 숫자 배열의 합을 계산합니다. async 및 await 키워드를 사용하여 비동기 작업을 처리하며, 작업이 완료될 때까지 대기합니다.

동기적 처리와 비동기적 처리는 각각의 상황에 따라 적합한 방법을 선택해야 합니다. 작업이 순차적으로 실행되는 경우 동기적 처리를 사용하고, 여러 작업을 동시에 처리해야 하는 경우 비동기적 처리를 사용합니다. 

아래 마이크로소프트에서 제공한 샘플등을 이용하여 추가로 학습이 가능합니다.

 

비동기 프로그래밍 시나리오 - C#

.NET Core에서 제공하는 C# 언어 수준 비동기 프로그래밍 모델에 대해 알아봅니다.

learn.microsoft.com

 

 

async 및 await를 사용한 TAP(작업 비동기 프로그래밍) 모델' - C#

C#에서 비동기 프로그래밍에 대한 간소화된 접근 방식인 작업 기반 비동기 프로그래밍을 사용하는 시기 및 방법을 알아봅니다.

learn.microsoft.com

 

반응형