[c#] C# yield 식과 비동기 캐싱

C# 에서 yield 키워드는 컬렉션을 생성하는 데 사용됩니다. yield 키워드를 사용하면 간단하게 이터레이터를 구현할 수 있으며, 코드를 좀 더 간결하고 이해하기 쉽게 만들어줍니다.

C# yield 식

IEnumerable<int> GetNumbers()
{
    yield return 1;
    yield return 2;
    yield return 3;
}

yield 키워드를 사용한 위의 예시에서 GetNumbers 메서드는 IEnumerable<int>를 반환하며, 호출자는 foreach 루프를 사용하여 각 갑을 순회할 수 있습니다.

비동기 캐싱

비동기 프로그래밍에서 캐싱은 결과를 캐시하여 재사용함으로써 성능을 향상시키는 중요한 기술입니다. C# 7.2부터는 ValueTaskValueTask<T>async 메서드를 사용하여 비동기 메서드의 성능을 개선하는 기능을 지원합니다.

public class DataCache
{
    private Dictionary<string, ValueTask<string>> _cache = new Dictionary<string, ValueTask<string>>();

    public async ValueTask<string> GetDataAsync(string key)
    {
        if (_cache.TryGetValue(key, out ValueTask<string> cached))
        {
            return await cached;
        }
        else
        {
            var data = await RetrieveDataFromSourceAsync(key);
            _cache[key] = new ValueTask<string>(data);
            return data;
        }
    }

    private async Task<string> RetrieveDataFromSourceAsync(string key)
    {
        // 비동기 작업 수행
    }
}

위의 예시에서 DataCache 클래스는 ValueTask를 사용하여 데이터를 캐싱하고, RetrieveDataFromSourceAsync 메서드는 실제로 데이터를 가져오는 비동기 작업을 수행합니다.

ValueTask를 사용하여 비동기 결과를 캐싱하면 중복된 비동기 작업을 효율적으로 관리할 수 있으며, 성능 향상에 큰 도움이 될 수 있습니다.

결론

C#의 yield 키워드를 이용하여 이터레이터를 만들고, ValueTask를 사용하여 비동기 결과를 효율적으로 캐싱함으로써 코드를 간결하게 만들고 성능을 향상시킬 수 있습니다.

참고 자료: