C#
IAsyncEnumerable
IAsyncEnumerable<T> ile zaman uyumsuz yinelemeyi öğrenirsin.
IAsyncEnumerable nedir?
IAsyncEnumerable<T>, async olarak akış biçiminde değer üreten bir koleksiyondur. Her öğe bir await ile üretilir; böylece büyük veriyi parça parça işleyebilirsin. Task<List<T>> yerine tüm listeyi beklemek yerine her öğeyi tek tek akıtabilirsin.
Bir metot async IAsyncEnumerable<T> döndürür. Gövdede yield return ile değer üretirsin. Tüketici await foreach ile her öğeyi bekleyerek alır. Bu, özellikle veritabanı ve API akışları için uygundur.
Akış tanımlama
Bir IAsyncEnumerable<T> metodu async ile işaretlenir ve yield return ile değer üretir. Örnek: static async IAsyncEnumerable<int> Numbers() { await Task.CompletedTask; yield return 1; yield return 2; }.
Her yield return bir öğe üretir ve akışı duraklatır; tüketici istediğinde devam eder. await ile her adımda bekleme yapabilirsin; bu, gerçek async senaryolarda giriş/çıkış beklemek için kullanılır.
Uygulama IAsyncEnumerable tanımla ve tüket
static async IAsyncEnumerable<int> Numbers() metodunu tanımla. Gövdede await Task.CompletedTask;, yield return 1;, yield return 2;, yield return 3; yaz. Main'i static async Task Main yap. int sum = 0; await foreach (int n in Numbers()) { sum += n; } ile topla, Console.WriteLine(sum); ile yazdır.
Örnek çözümü göster
Numbers gövdesinde await Task.CompletedTask; yield return 1; yield return 2; yield return 3; yaz. Main'i static async Task Main() yapıp int sum = 0; await foreach (int n in Numbers()) { sum += n; } Console.WriteLine(sum);
Örnek çözüm:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async IAsyncEnumerable<int> Numbers()
{
await Task.CompletedTask;
yield return 1;
yield return 2;
yield return 3;
}
static async Task Main()
{
int sum = 0;
await foreach (int n in Numbers())
{
sum += n;
}
Console.WriteLine(sum);
}
}
Kendini test et
-
IAsyncEnumerable ne yapar?
- Bir Task'ı bekler
- Async olarak değer akışı üretir
- Bir List<T> döndürür
- Bir thread başlatır
Cevabı göster
Async olarak değer akışı üretir — Doğru. IAsyncEnumerable async olarak değer akışı üretir.
-
IAsyncEnumerable bildirimini tamamla
static ____ IAsyncEnumerable<int> Numbers() { await Task.CompletedTask; yield return 1; }
Cevabı göster
static async IAsyncEnumerable<int> Numbers() { await Task.CompletedTask; yield return 1; }
-
IAsyncEnumerable neden kullanılır?
- Tüm listeyi tek seferde beklemek için
- Senkron kod yazmak için
- Büyük veriyi parça parça async işlemek için
- Thread havuzu yönetmek için
Cevabı göster
Büyük veriyi parça parça async işlemek için — Doğru. IAsyncEnumerable büyük veriyi parça parça async işlemek içindir.
Sıradaki ders: await foreach