Background Tasks Example
Patterns for running work after sending a response.
Run
pagi-server --app examples/background-tasks/app.pl --port 5000
Watch the server console for background task output.
Patterns
1. Async I/O (Non-Blocking)
For network calls, database queries, file I/O using async libraries:
fire_and_forget(send_welcome_email($email));
Always use ->on_fail() before ->retain() to avoid silently swallowing errors.
2. Blocking/CPU Work (Subprocess)
For CPU-intensive or blocking operations, use IO::Async::Function:
run_blocking_task("heavy_computation", 3);
Runs in a child process, doesn't block the event loop.
3. Quick Sync Work
For very fast operations (<10ms) after response - just call directly after await:
await $res->json({ status => 'ok' });
quick_sync_task("log"); # runs after response is sent
Warning: Any blocking here blocks ALL requests!
Endpoints
GET /async- Fire-and-forget async I/OGET /blocking- CPU work in subprocessPOST /signup- Real-world example with background email