Spec-Zone.ru › Tokio

Функция channel

pub fn channel<T: Clone>(capacity: usize) -> (Sender<T>, Receiver<T>)
Доступна только при включённой функции крейта sync.

Создаёт ограниченный канал с множеством отправителей и получателей, в котором каждое отправленное значение рассылается всем активным получателям.

Примечание: Указанное значение capacity округляется вверх до ближайшей степени двойки. Это округлённое значение определяет количество сообщений, которое может хранить внутренний кольцевой буфер, и используется для обнаружения отставания. Например, channel(3) работает так, как если бы ёмкость была равна 4.

Все данные, отправленные через Sender, станут доступны каждому активному Receiver в том же порядке, в котором они были отправлены.

Sender можно клонировать, чтобы send в тот же канал из разных точек процесса, или использовать параллельно из Arc. Новые дескрипторы Receiver создаются вызовом Sender::subscribe.

Если все дескрипторы Receiver будут отброшены, метод send вернёт SendError. Аналогично, если все дескрипторы Sender будут отброшены, метод recv вернёт RecvError.

Примеры

use tokio::sync::broadcast;

let (tx, mut rx1) = broadcast::channel(16);
let mut rx2 = tx.subscribe();

tokio::spawn(async move {
    assert_eq!(rx1.recv().await.unwrap(), 10);
    assert_eq!(rx1.recv().await.unwrap(), 20);
});

tokio::spawn(async move {
    assert_eq!(rx2.recv().await.unwrap(), 10);
    assert_eq!(rx2.recv().await.unwrap(), 20);
});

tx.send(10).unwrap();
tx.send(20).unwrap();

Паника

Это приведёт к панике, если capacity равен 0.

Здесь заранее выделяется место для capacity сообщений. Ошибка выделения памяти может привести к панике или ошибке выделения памяти.

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/sync/broadcast/fn.channel.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API