C# 8.0 – Asenkron Foreach

Merhaba,

Bu içeriğimizde, bir önceki IAsyncEnumerablee<T> ve IAsyncEnumeratore<T> Arayüzleri İle Asenkron Iterasyonel İşlev Oluşturma başlıklı makalemizle ilişkili olan Asenkron Foreach yapılanması üzerine konuşuyor olacağız.

C# 8.0 ile gelen IAsyncEnumerable<T> interfacei IEnumerable<T> türünün yeni bir asenkron versiyonu olarak hayatımıza girmiştir. Bu tip sayesinde foreach döngüsünde async keywordünü kullanabilmekte ve asenkron işlemler gerçekleştirebilmekteyiz.

Asenkron foreach kullanabilmek için geriye IAsyncEnumerable<T> tipinden değer döndüren bir metot üzerinde çalışılması yeterlidir.

        static async Task Do()
        {
            await foreach (var item in Numbers())
            {
                Console.WriteLine(item);
            }
        }

        static async IAsyncEnumerable<int> Numbers()
        {
            yield return 3;
            await Task.Delay(1000);
            yield return 5;
            await Task.Delay(1000);
            yield return 6;
            await Task.Delay(1000);
            yield return 7;
            await Task.Delay(1000);
            yield return 8;
        }

Yukarıdaki kod bloğunda da görüldüğü üzere ilgili tipten geriye değer döndüren metodumuz içerisinde yield return ile itere edilen verilerin olması yeterli olacaktır.

Fikir vermesi maksadıyla Numbers metodunun içeriğini aşağıdaki gibi de şekillendirebiliriz.

        static async Task Do()
        {
            await foreach (var item in Numbers())
            {
                Console.WriteLine(item);
            }
        }

        static async IAsyncEnumerable<int> Numbers()
        {
            List<int> numbers = new List<int> { 3, 5, 6, 7, 8 };
            foreach (var item in numbers)
            {
                await Task.Delay(1000);
                yield return item;
            }
        }

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*