Essential session storage is required to sign in. Optional analytics remain off unless you allow them.
Build a Kotlin program that fetches or processes several things CONCURRENTLY using coroutines (e.g. fetch N URLs / read N files / run N computations in parallel and aggregate). Requirements: use suspend functions and async/await (or launch) for parallelism; run everything under STRUCTURED CONCURRENCY (a coroutineScope so failures and cancellation propagate cleanly, no leaked coroutines); pick appropriate dispatchers (Dispatchers.IO for blocking I/O); handle errors across suspension points (try/catch or supervisorScope so one failure doesn't sink the rest); and expose or consume results as a Flow where a stream fits. Explain why coroutines are lighter than threads here.
suspend + async/await (or launch) for real parallelism; structured concurrency (coroutineScope), correct dispatchers; no leaked/orphaned coroutines.
Error handling across suspension (try/catch or supervisorScope); Flow used where a stream fits (cold stream + collect).
Explains coroutines vs threads (lightweight, structured) correctly.
Use this README structure to make the work reviewable.
DevPath fetches a read-only, size-capped snapshot. Submitted code is never executed.
# A concurrent fetcher with coroutines ## Goal Build a Kotlin program that fetches or processes several things CONCURRENTLY using coroutines (e.g. fetch N URLs / read N files / run N computations in parallel and aggregate). Requirements: use suspend functions and async/await (or launch) for parallelism; run everything under STRUCTURED CONCURRENCY (a coroutineScope so failures and cancellation propagate cleanly, no leaked coroutines); pick appropriate dispatchers (Dispatchers.IO for blocking I/O); handle errors across suspension points (try/catch or supervisorScope so one failure doesn't sink the rest); and expose or consume results as a Flow where a stream fits. Explain why coroutines are lighter than threads here. ## Acceptance criteria - [ ] Coroutines correctness: suspend + async/await (or launch) for real parallelism; structured concurrency (coroutineScope), correct dispatchers; no leaked/orphaned coroutines. - [ ] Errors & Flow: Error handling across suspension (try/catch or supervisorScope); Flow used where a stream fits (cold stream + collect). - [ ] Understanding: Explains coroutines vs threads (lightweight, structured) correctly. ## Verification - [ ] Document installation and run commands. - [ ] Record automated checks and their exact commands. - [ ] Add representative output, screenshots, or a short demo where useful. - [ ] Confirm failure paths and known constraints. ## Decision log ### Decision title - Context: - Choice: - Alternatives considered: - Tradeoffs: ## Evidence - Link each rubric criterion to the file, test, or artifact that demonstrates it. ## Known limitations - List what is intentionally out of scope and what should be improved next.