Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Крейт channel

Источник: Документация async-channel

Асинхронный многопоточный канал, где каждое сообщение может быть получено только одним из всех существующих потребителей.

Типы каналов

Существует два вида каналов:

  • Ограниченный канал (bounded) с ограниченной емкостью
  • Неограниченный канал (unbounded) с неограниченной емкостью

Структура канала

Канал имеет сторону Отправителя (Sender) и сторону Получателя (Receiver). Обе стороны могут быть клонированы и использоваться из нескольких потоков.

Закрытие канала

Когда все отправители или все получатели уничтожаются, канал закрывается. Когда канал закрыт, нельзя отправлять новые сообщения, но оставшиеся сообщения все еще можно получить.

Канал также можно закрыть вручную, вызвав Sender::close() или Receiver::close().

Примеры

#![allow(unused)]
fn main() {
let (s, r) = async_channel::unbounded();

assert_eq!(s.send("Hello").await, Ok(()));
assert_eq!(r.recv().await, Ok("Hello"));
}

Структуры

СтруктураОписание
ReceiverСторона получения канала
RecvФьючерс, возвращаемый Receiver::recv()
RecvErrorОшибка, возвращаемая из Receiver::recv()
SendФьючерс, возвращаемый Sender::send()
SendErrorОшибка, возвращаемая из Sender::send()
SenderСторона отправки канала
WeakReceiverReceiver, который не препятствует закрытию канала
WeakSenderSender, который не препятствует закрытию канала

Перечисления

ПеречислениеОписание
TryRecvErrorОшибка, возвращаемая из Receiver::try_recv()
TrySendErrorОшибка, возвращаемая из Sender::try_send()

Функции

ФункцияОписание
boundedСоздает ограниченный канал
unboundedСоздает неограниченный канал