Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Конкурентное программирование / Каналы / Чтение после конца
Тест — Чтение после конца
Из канала уже получены все отправленные в него значения. Что
произойдёт при следующем .receive, если
канал всё ещё открыт (не закрывался)?
| 0 | Будет брошено X::Channel::ReceiveOnClosed |
| 1 | Он заблокирует выполнение, ожидая значения, которого может и не быть |
| 0 | Он вернёт Nil |
| 0 | Он вернёт пустой список () |
На открытом канале .receive не может
определить, в пути ли ещё одно значение, поэтому он ждёт — возможно,
вечно, если производитель остановился, не закрыв канал. Исключение
X::Channel::ReceiveOnClosed относится к случаю
закрытого канала: только закрытый и пустой канал
отказывает сразу, а не блокирует выполнение.