Future.wait
- Dart kursu
- Başlangıç
- Ders 110/116
- 5 dk
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
void main() {
// async olarak işaretle
// Future.wait ile üç Future'ı bekle
// sonuçu yazdır
}Örnek çözüm
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
final sonuç = await ____([Future.value(1), Future.value(2)]);
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?
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ışı |