⚡ async - Asenkron Programlama
async/await, Promises, Future, Runtime, Task Scheduler
71
Fonksiyon
969
Satır
29 KB
Boyut
🚀 Hızlı Başlangıç
içe_aktar async, http
// async fonksiyon tanımı
async fonksiyon veri_getir(url: yazı) -> Sonuç yap
değişken yanıt = await http.get(url)
eğer yanıt.durum == 200 ise yap
dön Tamam(yanıt.gövde)
son değilse yap
dön Hata("HTTP " + yanıt.durum.yazıya())
son
son
// Paralel çalıştırma
async fonksiyon paralel_istekler() yap
değişken görevler = [
veri_getir("https://api.example.com/users"),
veri_getir("https://api.example.com/posts"),
veri_getir("https://api.example.com/comments")
]
değişken sonuçlar = await async.all(görevler)
her sonuç içinde sonuçlar için yap
yazdır("Veri alındı: " + sonuç.uzunluk().yazıya() + " byte")
son
son
// Ana async runtime
async.run(paralel_istekler())
📚 Özellikler
- async/await: JavaScript ve Rust tarzı async syntax
- Runtime: Tokio-inspired async executor
- Task Scheduler: Work-stealing multi-threaded scheduler
- Channels: mpsc, broadcast, oneshot
- Utilities: timeout, select, join, race
💡 Örnekler
Async HTTP Server
içe_aktar async, http, json
async fonksiyon handle_request(istek: HttpIstek) -> HttpYanit yap
eğer istek.yol == "/api/users" ise yap
// Simulate DB query
await async.sleep(100)
değişken users = [
{"id": 1, "name": "Ali"},
{"id": 2, "name": "Ayşe"}
]
dön http.yanıt(200, json.stringify(users))
son değilse yap
dön http.yanıt(404, "Not Found")
son
son
async fonksiyon sunucu_başlat() yap
değişken sunucu = http.sunucu("127.0.0.1:8080")
yazdır("Server listening on http://127.0.0.1:8080")
döngü yap
değişken istek = await sunucu.bekle()
// Her isteği ayrı task'ta işle
async.spawn(async yap
değişken yanıt = await handle_request(istek)
await sunucu.gönder(yanıt)
son)
son
son
async.run(sunucu_başlat())
Concurrent Task Management
içe_aktar async
async fonksiyon download_file(url: yazı, dosya: yazı) -> Sonuç yap
yazdır("İndirme başladı: " + dosya)
// Simulate download
await async.sleep(random.aralık(1000, 3000))
yazdır("İndirme tamamlandı: " + dosya)
dön Tamam(dosya)
son
async fonksiyon download_with_timeout(url: yazı, dosya: yazı, timeout_ms: tamsayı) -> Sonuç yap
değişken sonuç = await async.timeout(
download_file(url, dosya),
timeout_ms
)
eğer sonuç.hata_mı() ise yap
yazdır("Timeout: " + dosya)
son
dön sonuç
son
async fonksiyon batch_download() yap
değişken dosyalar = [
("https://example.com/file1.pdf", "file1.pdf"),
("https://example.com/file2.pdf", "file2.pdf"),
("https://example.com/file3.pdf", "file3.pdf")
]
// Maksimum 2 eşzamanlı indirme
değişken semaphore = async.semaphore_new(2)
değişken görevler = []
her (url, dosya) içinde dosyalar için yap
değişken görev = async.spawn(async yap
değişken izin = await semaphore.acquire()
değişken sonuç = await download_with_timeout(url, dosya, 5000)
semaphore.release(izin)
dön sonuç
son)
görevler.ekle(görev)
son
değişken sonuçlar = await async.all(görevler)
yazdır("Tüm indirmeler tamamlandı: " + sonuçlar.uzunluk().yazıya())
son
async.run(batch_download())