Özet - Async temelleri
- Dart kursu
- Başlangıç
- Ders 111/116
- 5 dk
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
void main() {
// fetch işlevini tanımla
// async main ile Future.wait çağır
// sonuçu yazdır
}Örnek çözüm
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
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
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?
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.