我想弄清楚为什么以下代码不起作用。没有打印出响应,而且其他研究请求失败。
task :test_me do
t1 = Thread.new do
puts 'start'
uri = URI.parse("http://google.com/")
response = Net::HTTP.get_response(uri)
puts response.inspect # this line not getting printed
end
# puts t1.value
end
但是,如果我运行以下
task :test_me do
t1 = Thread.new do
puts 'start'
uri = URI.parse("http://google.com/")
response = Net::HTTP.get_response(uri)
puts response.inspect # this line is printing because of puts below
end
puts t1.value
end
一切都很好
请注意,可能有很多方法可以重新构建此代码,但我尽可能地将示例缩小并从gem中提取,因此我没有太多的控制权超过它。
如果我能够找到一个可靠的原因来解释为什么这不能用于rake任务,我可能会用PR回复他们。
感谢。
答案 0 :(得分:2)
发生这种情况的原因是因为您未在join
阻止后调用Thread
。但是,当您使用.value
时,它会自动为您加入线程(如文档here所示)
试试这个:
task :test_me do
t1 = Thread.new do
puts 'start'
uri = URI.parse("http://google.com/")
response = Net::HTTP.get_response(uri)
puts response.inspect
end
t1.join
end