为什么退出 Ruby 线程会导致整个程序崩溃?

7

我有这段代码:

puts "Start"
loop do
    Thread.start do
        puts "Hello from thread"
        exit
    end
    text = gets
    puts "#{text}"
end
puts "Done"

我期望看到的是“Start”后面跟着“Hello from thread”,然后我可以输入内容并得到回显。但实际上,我只看到了“Start”和“Hello from thread”,程序就退出了。
根据exit的文档:
终止当前线程,并安排另一个线程运行。如果当前线程已被标记为要被终止,则exit函数会返回该线程。如果当前线程是主线程或最后一个线程,那么exit函数将退出整个进程。
但我想我已经启动了一个新线程,为什么它会退出我的主进程呢?
1个回答

10

您正在查看Thread#exit文档。 killKernel#exit,它会终止Ruby脚本。

puts "Start"
loop do
    Thread.start do
        puts "Hello from thread"
        Thread.exit
    end
    text = gets
    puts "#{text}"
end
puts "Done"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接