CodeBlanks Logo Icon CodeBlanks

Future.wait

Future.wait ile paralel Future'ları öğrenirsin.

Future.wait

Birden çok Future'ı paralel başlatıp hepsinin bitmesini beklemek için Future.wait kullanılır. Bir Future listesi alır ve hepsi tamamlandığında değerlerin listesini döndürür. Paralel çalışma, sıralı await'ten çok daha hızlıdır.

Örnek: final sonuç = await Future.wait([Future.value(1), Future.value(2), Future.value(3)]);. sonuç bir List<int>'tir ve [1, 2, 3] içerir. Üç Future paralel çalışır; hepsi bitince Future.wait tamamlanır. Bir Future hata verirse Future.wait de hata ile biter. async işlevde await ile beklenir; .then ile de zincirlenebilir.

Uygulama Sıra sende: paralel bekle

Future<void> main() async işaretle. final sonuç = await Future.wait([Future.value(1), Future.value(2), Future.value(3)]); ile üç paralel Future'ı bekle. Sonra print(sonuç) ile listeyi yazdır.

Başlangıç kodu

main.dart
void main() {
  // async olarak işaretle
  // Future.wait ile üç Future'ı bekle
  // sonuçu yazdır
}

Örnek çözüm

main.dart
Future<void> main() async {
  final sonuç = await Future.wait([Future.value(1), Future.value(2), Future.value(3)]);
  print(sonuç);
}

Beklenen çıktı

[1, 2, 3]

Paralel ve sıralı farkı

Üç Future'ı sırayla await edersen toplam süre üçünün süresi toplamı kadar olur. Future.wait ile paralel başlatırsan en yavaşın süresi kadar olur. Üç Future da 1 saniye sürüyorsa sıralı 3 saniye, paralel 1 saniye sürer.

Bu yüzden bağımsız işleri paralel yapmak iyi bir alışkanlıktır. Ama dikkat: birbirine bağlı işleri paralel yapamazsın; ikincisi birincinin sonuçunu bekliyorsa sıralı gitmek gerekir. Future.wait içinde her Future'ın türü aynı olmalı; farklı türler için ortak bir üst tür kullanılır. Hata yönetiminde bir Future hata verirse tüm Future.wait hata verir; eagerError: false ile diğerlerinin bitmesini bekleyebilirsin.

Soru ve cevaplar

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

1 Future.wait

Soru
final sonuç = await ____([Future.value(1), Future.value(2)]);
Cevap
final sonuç = await Future.wait([Future.value(1), Future.value(2)]);

Açıklama: Future.wait paralel Future'ları bekler.

2 Üç bağımsız Future'ı beklemenın en hızlı yolu?

main.dart
final a = await Future.wait([
  Future.value(1),
  Future.value(2),
  Future.value(3),
]);
  • Sırayla await
  • .then ile zincir
  • Future.wait ile paralel Doğru cevap
  • try/catch

Açıklama: Future.wait paralel çalışır, en hızlısıdır.

3 Future.wait eşleştir

Kavram Anlamı
Future.wait paralel bekler
List<Future> girdi listesi
List<T> çıkış listesi
eagerError hata davranışı

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