⚡ 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

💡 Ö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())

← Tüm Modüller