비동기 프로그래밍에서 데이터 처리 파이프라인을 구성할 때, System.Threading.Channels는 효율적인 데이터 흐름 제어를 돕습니다. 이 글에서는 채널을 사용해 생산자-소비자 패턴을 구현하는 방법을 소개합니다.
1. System.Threading.Channels란?
채널은 비동기 큐와 유사한 구조로, 여러 생산자와 소비자가 안전하고 효율적으로 데이터를 교환할 수 있도록 설계되었습니다.
2. 기본 사용법
먼저 Channel 클래스를 생성하고, 생산자 역할은 데이터를 쓰기, 소비자 역할은 데이터를 읽기로 구현합니다.
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
var channel = Channel.CreateUnbounded<int>();
// 생산자
var producer = Task.Run(async () =>
{
for (int i = 0; i < 5; i++)
{
await channel.Writer.WriteAsync(i);
Console.WriteLine($"Produced: {i}");
}
channel.Writer.Complete();
});
// 소비자
var consumer = Task.Run(async () =>
{
await foreach (var item in channel.Reader.ReadAllAsync())
{
Console.WriteLine($"Consumed: {item}");
}
});
await Task.WhenAll(producer, consumer);
}
}
3. 활용 팁
- 버퍼 크기를 설정해 생산자와 소비자의 속도 차이를 조절할 수 있습니다.
- Complete 메서드 호출로 생산자 완료를 알리고, 소비자가 정상 종료하도록 합니다.
- 예외 처리를 통해 안정성을 높이세요.
System.Threading.Channels는 복잡한 비동기 파이프라인을 간단하고 안정적으로 구축할 수 있어 현대 C# 비동기 개발에 유용합니다.
'C#' 카테고리의 다른 글
| C# BitOperations로 비트 연산 최적화하기 (0) | 2026.05.15 |
|---|---|
| C# Local Function을 활용한 코드 가독성 개선 (0) | 2026.05.15 |
| C# Polyglot 애플리케이션: IronPython과의 상호운용 (0) | 2026.05.14 |
| C# HTTP 클라이언트 팩토리(HttpClientFactory) 사용과 베스트 프랙티스 (1) | 2026.05.13 |
| C# 타입 변환 연산자와 Custom TypeConverter 정의하기 (0) | 2026.05.13 |