CodeBlanks Logo Icon CodeBlanks

Özet - Async temelleri

async/await ve Future.wait'ı birleştirerek bir paralel indirici yazarsın.

Özet - Async temelleri

Bu grupta asenkron programlamanın temellerini gördün: Future ile asenkron işlem, async/await ile okunur kod, .then ile zincirleme, Future.error ve .catchError ile hata yönetimi, Future.wait ile paralel çalışma. Şimdi hepsini bir paralel indirici örneğinde birleştireceğiz.

Bir paralel indirici, birden çok kaynaktan veriyi aynı anda çeker. Her kaynak bir Future ile temsil edilir; Future.wait hepsini paralel başlatır ve sonuçları bir listeler. Hata durumunda .catchError veya try/await/catch ile kurtarma yapılır. Bu, gerçek bir uygulamada asenkron kodun nasıl kullanıldığını gösterir.

Uygulama Sıra sende: iki kaynağı paralel indir

Future<String> fetch(String kaynak) adında bir işlev yaz; verilen ad için Future.value("veri-\$kaynak") döndürsün. Future<void> main() async içinde Future.wait ile fetch("a") ve fetch("b")'yi paralel başlat ve print(sonuç) ile yazdır.

Başlangıç kodu

main.dart
void main() {
  // fetch işlevini tanımla
  // async main ile Future.wait çağır
  // sonuçu yazdır
}

Örnek çözüm

main.dart
Future<String> fetch(String kaynak) => Future.value("veri-$kaynak");

Future<void> main() async {
  final sonuç = await Future.wait([fetch("a"), fetch("b")]);
  print(sonuç);
}

Beklenen çıktı

[veri-a, veri-b]

Uygulama Sıra sende: hata yakalanan indirici

Future<String> fetch(String kaynak) işlevi yaz; kaynak "hata" ise Future.error(Exception("başarısız")), değilse Future.value("veri-\$kaynak") döndürsün. Future<void> main() async içinde try ile await Future.wait([fetch("a"), fetch("hata")]) çağır; catch (e) ile print(e) yazdır. Böylece paralel hata yakalanır.

Başlangıç kodu

main.dart
void main() {
  // fetch işlevini tanımla ("hata" için error döndür)
  // async main içinde try + await Future.wait
  // catch ile hatayı yazdır
}

Örnek çözüm

main.dart
Future<String> fetch(String kaynak) =>
    kaynak == "hata" ? Future.error(Exception("başarısız")) : Future.value("veri-$kaynak");

Future<void> main() async {
  try {
    await Future.wait([fetch("a"), fetch("hata")]);
  } catch (e) {
    print(e);
  }
}

Beklenen çıktı

Exception: başarısız

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Async araçlarını eşleştir

Kavram Anlamı
Future ileride değer
async/await okunur bekleme
.then zincirleme
Future.wait paralel çalışma

2 Birden çok kaynaktan paralel veri çekmek için?

main.dart
final s = await Future.wait([
  fetch("a"),
  fetch("b"),
]);
  • Future.wait
  • for döngüsü
  • .then zinciri
  • sırayla await Doğru cevap

Açıklama: Future.wait paralel çalıştırır.

Başlangıç bölümündeki tüm dersler