Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Конкурентное программирование / Каналы / Чтение после конца

Тест — Чтение после конца

Из канала уже получены все отправленные в него значения. Что произойдёт при следующем .receive, если канал всё ещё открыт (не закрывался)?

0Будет брошено X::Channel::ReceiveOnClosed
1Он заблокирует выполнение, ожидая значения, которого может и не быть
0Он вернёт Nil
0Он вернёт пустой список ()

На открытом канале .receive не может определить, в пути ли ещё одно значение, поэтому он ждёт — возможно, вечно, если производитель остановился, не закрыв канал. Исключение X::Channel::ReceiveOnClosed относится к случаю закрытого канала: только закрытый и пустой канал отказывает сразу, а не блокирует выполнение.

Навигация по курсу

Чтение после конца   |   Получите значение