Приостановка выполнения в Rust: методы задержки

В Rust есть несколько способов приостановить выполнение программы на определенное время. Приостановка выполнения может быть полезна в различных сценариях, таких как создание задержек между операциями, реализация тайм-аутов или управление потоком параллельных процессов. В этой статье блога мы рассмотрим несколько методов достижения задержек в Rust, а также приведем примеры кода.

Метод 1: использование функции std::thread::sleep
Функция std::thread::sleepпозволяет приостановить текущий поток на определенный период времени. В качестве аргумента он принимает std::time::Duration, определяющий желаемую задержку. Вот пример:

use std::thread;
use std::time::Duration;
fn main() {
    println!("Before sleep");
    thread::sleep(Duration::from_secs(5));
    println!("After sleep");
}

Метод 2: использование функции std::thread::park_timeout
Функция std::thread::park_timeoutприостанавливает текущий поток до тех пор, пока не истечет указанная продолжительность или пока он не получит сигнал отмены парковки от другого потока. Вот пример:

use std::thread;
use std::time::Duration;
fn main() {
    println!("Before park");
    thread::park_timeout(Duration::from_secs(5));
    println!("After park");
}

Метод 3. Использование библиотеки tokioдля асинхронных задержек
Если вы работаете с асинхронным Rust, используя среду выполнения tokio, вы можете использовать tokio::time::sleepфункция для задержек. Вот пример:

use tokio::time;
use std::time::Duration;
#[tokio::main]
async fn main() {
    println!("Before sleep");
    time::sleep(Duration::from_secs(5)).await;
    println!("After sleep");
}

Метод 4. Использование библиотеки async-stdдля асинхронных задержек
Подобно tokio, библиотека async-stdобеспечивает удобный способ внедрения задержки в асинхронных программах Rust. Вот пример:

use async_std::task;
use std::time::Duration;
#[async_std::main]
async fn main() {
    println!("Before sleep");
    task::sleep(Duration::from_secs(5)).await;
    println!("After sleep");
}

В этой статье мы рассмотрели несколько способов приостановить выполнение в Rust на определенный период времени. Мы рассмотрели использование функций std::thread::sleep, std::thread::park_timeoutи библиотек tokioи async-stdдля асинхронных задержек. С помощью этих методов вы можете добавлять задержки в свои программы на Rust, что позволяет вам контролировать время и эффективно управлять параллелизмом.