[c#] C# 이터레이터와 비동기 스트림
C# 언어는 이터레이터와 비동기 스트림을 활용하여 데이터 시퀀스를 간편하게 처리할 수 있는 기능을 제공합니다. 이터레이터는 컬렉션 내의 요소를 순회하고 반환하는 데 사용되는 도구이며, 비동기 스트림은 비동기적으로 데이터를 생성하는 기능을 제공합니다.
이터레이터
이터레이터는 yield
키워드를 사용하여 구현됩니다. yield
키워드를 사용하면 호출자에게 데이터를 반환하고, 현재 상태를 유지한 채로 다음 호출을 기다릴 수 있습니다.
다음은 간단한 이터레이터 함수의 예제 코드입니다.
public IEnumerable<int> GetNumbers()
{
yield return 1;
yield return 2;
yield return 3;
}
위의 코드는 GetNumbers
메서드가 이터레이터로 동작하도록 만들어주는 yield
키워드를 사용합니다.
비동기 스트림
C# 8.0부터 비동기 스트림을 지원합니다. 비동기 스트림을 활용하면 await foreach
구문을 사용하여 비동기적으로 데이터를 처리할 수 있습니다.
다음은 비동기 스트림을 사용하는 예제 코드입니다.
public async IAsyncEnumerable<int> GetNumbersAsync()
{
await Task.Delay(1000); // 비동기 작업
yield return 1;
await Task.Delay(1000); // 비동기 작업
yield return 2;
await Task.Delay(1000); // 비동기 작업
yield return 3;
}
위의 코드는 GetNumbersAsync
메서드가 비동기 스트림으로 동작하도록 만들어주는 IAsyncEnumerable
인터페이스와 yield
키워드를 사용합니다.
이처럼 C#의 이터레이터와 비동기 스트림은 데이터 시퀀스를 처리할 때 효율적이고 간편한 방법을 제공합니다.
참고 문헌:
- Microsoft Docs. “Iterators (C#)” https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/iterators
- Microsoft Docs. “Asynchronous streams (C#)” https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/asynchronous-streamslink text