Async Handlers & async fn
Penjelasan
Semua handler di Actix-web ditulis sebagai `async fn` karena Actix dibangun di atas runtime asynchronous Tokio. Model async memungkinkan satu thread worker menangani banyak request secara bersamaan tanpa memblokir — saat handler menunggu I/O (misalnya query database atau memanggil API eksternal), thread tersebut bisa mengerjakan request lain sampai operasi I/O selesai (`.await`). Ini berbeda dari model thread-per-request tradisional yang lebih boros resource. Kalau kamu memanggil fungsi async lain di dalam handler, jangan lupa `.await` di setiap pemanggilannya.
Contoh Konsep
use actix_web::{get, Responder};
use std::time::Duration;
async fn ambil_data_lambat() -> String {
tokio::time::sleep(Duration::from_millis(100)).await;
"data selesai diambil".to_string()
}
#[get("/lambat")]
async fn handler_lambat() -> impl Responder {
let hasil = ambil_data_lambat().await;
hasil
}
Praktikum
Lengkapi handler agar menunggu hasil dari fungsi async lain sebelum dikembalikan.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Jangan memanggil operasi blocking (misalnya operasi file sinkron berat) langsung di dalam `async fn` tanpa `spawn_blocking` — ini bisa memblokir seluruh worker thread dan menurunkan performa semua request lain yang sedang ditangani thread tersebut.