класс Ractor::ClosedError
Выбрасывается при попытке отправить сообщение на закрытый порт или получить сообщение с закрытого и пустого порта. Порты могут быть закрыты явно с помощью Ractor#close_outgoing/close_incoming и закрываются неявно при завершении Ractor.
r = Ractor.new { sleep(500) }
r.close_outgoing
r.take # Ractor::ClosedError
ClosedError является потомком StopIteration, поэтому закрытие рактора прервет циклы без распространения ошибки:
r = Ractor.new do
loop do
msg = receive # raises ClosedError and loop traps it
puts "Received: #{msg}"
end
puts "loop exited"
end
3.times{|i| r << i}
r.close_incoming
r.take
puts "Continue successfully"
Это выведет:
Received: 0 Received: 1 Received: 2 loop exited Continue successfully
Ruby Core © 1993–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.