不确定我是否正确理解了你的意思,但这是预期的结果吗
First producer sent: 0
Consumer received "First: 0"!
Second producer sent: 0
Consumer received "Second: 0"!
First producer sent: 1
Consumer received "First: 1"!
Second producer sent: 1
Consumer received "Second: 1"!
First producer sent: 2
Consumer received "First: 2"!
Second producer sent: 2
Consumer received "Second: 2"!
First producer sent: 3
Consumer received "First: 3"!
Second producer sent: 3
Consumer received "Second: 3"!
First producer sent: 4
Consumer received "First: 4"!
Second producer sent: 4
Consumer received "Second: 4"!
如果有;代码如下:
class CrystalIsAwesome
@@products = 0
@@channel = Channel(String).new
def self.produce(which, times, produce_time = 0)
@@products += times
spawn do
times.times do |i|
puts "#{which} producer sent: #{i}"
@@channel.send "#{which}: #{i}"
sleep produce_time.seconds
end
end
end
# first producer
produce "First", 5
# second producer
produce "Second", 5
@@products.times do |_|
puts %(Consumer received "#{@@channel.receive}"!)
end
end
尝试添加第三个制作人(
produce "Third", 2, 1
)看看结果如何。
再一次看见
the Concurrency docs
为什么会这样。