⚡ async - Asenkron Programlama

async/await, Promises, Future, Runtime, Task Scheduler

71
function
969
lines
29 KB
Boyut

🚀 Quick Start

import async, http

// async function tanımı
async function veri_getir(url: str) -> Result do
    let yanıt = await http.get(url)
    if yanıt.durum == 200  do
        return Ok(yanıt.gövde)
    end else do
        return Error("HTTP " + yanıt.durum.yazıya())
    end
end

// Paralel çalıştırma
async function paralel_istekler() do
    let görevler = [
        veri_getir("https://api.example.com/users"),
        veri_getir("https://api.example.com/posts"),
        veri_getir("https://api.example.com/comments")
    ]
    
    let Resultlar = await async.all(görevler)
    
    each Result in Resultlar for do
        yazdır("Veri alındı: " + Result.uzunluk().yazıya() + " byte")
    end
end

// Ana async runtime
async.run(paralel_istekler())

📚 Özellikler

💡 Exampleler

Async HTTP Server

import async, http, json

async function handle_request(istek: HttpIstek) -> HttpYanit do
    if istek.yol == "/api/users"  do
        // Simulate DB query
        await async.sleep(100)
        
        let users = [
            {"id": 1, "name": "Ali"},
            {"id": 2, "name": "Ayşe"}
        ]
        
        return http.yanıt(200, json.stringify(users))
    end else do
        return http.yanıt(404, "Not Found")
    end
end

async function sunucu_başlat() do
    let sunucu = http.sunucu("127.0.0.1:8080")
    yazdır("Server listening on http://127.0.0.1:8080")
    
    loop do
        let istek = await sunucu.bekle()
        
        // each isteği ayrı task'ta işle
        async.spawn(async do
            let yanıt = await handle_request(istek)
            await sunucu.gönder(yanıt)
        end)
    end
end

async.run(sunucu_başlat())

Concurrent Task Management

import async

async function download_file(url: str, dosya: str) -> Result do
    yazdır("İndirme başladı: " + dosya)
    
    // Simulate download
    await async.sleep(random.aralık(1000, 3000))
    
    yazdır("İndirme Oklandı: " + dosya)
    return Ok(dosya)
end

async function download_with_timeout(url: str, dosya: str, timeout_ms: tamsayı) -> Result do
    let Result = await async.timeout(
        download_file(url, dosya),
        timeout_ms
    )
    
    if Result.Error_mı()  do
        yazdır("Timeout: " + dosya)
    end
    
    return Result
end

async function batch_download() do
    let 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
    let semaphore = async.semaphore_new(2)
    let görevler = []
    
    each (url, dosya) in dosyalar for do
        let görev = async.spawn(async do
            let izin = await semaphore.acquire()
            let Result = await download_with_timeout(url, dosya, 5000)
            semaphore.release(izin)
            return Result
        end)
        görevler.ekle(görev)
    end
    
    let Resultlar = await async.all(görevler)
    yazdır("Tüm indirmeler Oklandı: " + Resultlar.uzunluk().yazıya())
end

async.run(batch_download())

← All Modules