Study
Actix

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.

Editor Latihan

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.