⚡ 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
- async/await: JavaScript and 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
💡 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())