упр.11 задача 1
- Краен срок:
- 24.12.2025 23:59
- Точки:
- 4
Срокът за предаване на решения е отминал
Тази задача изисква да използвате външната библиотека tokio.
Направете си нов проект с cargo new или cargo init.
Извикайте cargo add tokio --features=full. Алтернативно, можете да добавите на ръка следното в Cargo.toml файла на вашия проект.
[dependencies]
tokio = { version = "1.48.0", features = ["full"] }
След това компилирайте с cargo build.
Можете да използвате неща от библиотеката с use tokio::...;
Има документация на https://docs.rs/tokio/latest/tokio/.
Системата ще позволява използването на библиотеките tokio и futures.
Task Scheduler
Ще реализирате опростен асинхронен мениджър на задачи, който стартира задачи с различна продължителност и събира резултатите им.
Част 1 — Асинхронна задача
Имплементирайте асинхронна функция:
use std::time::Duration;
async fn run_task(id: usize, duration: Duration) -> Result<String, String>
Функцията трябва:
Асинхронно да изчака време duration.
Ако duration > 800 ms, да върне грешка:
Task {id} timed out
- В противен случай да върне:
Task {id} finished in {duration_ms} ms
Част 2 — Мениджър на задачи
Имплементирайте функция
use std::io::Write;
async fn manage_tasks(task_infos: &[(usize, Duration)], w: &mut dyn Write);
Функцията получава списък от задачи във формат
(id, duration).Стартирайте всички задачи паралелно, например използвайки
tokio::spawn.Не await-вайте задачите веднага след стартирането им.
-
След като всички задачи са стартирани:
- изчакайте всяка от тях;
- ако задачата е успешна, отпечатайте в
wрезултата (използвайтеwriteln!(w, ...)); - ако е неуспешна, отпечатайте в
wгрешката.
Накрая отпечатайте в
wобобщение:
Successful tasks: X
Failed tasks: Y
Примерен изход
Редът на извеждане не е фиксиран.
Task 5 finished in 200 ms
Task 1 finished in 300 ms
Task 3 finished in 500 ms
Task 4 timed out
Task 2 timed out
Successful tasks: 3
Failed tasks: 2
Обобщена информация от лекцията
Задължително прочетете (или си припомнете): Указания за предаване на домашни
Погрижете се решението ви да се компилира с базовия тест:
