如何从 Concurrent::Promise::all 中获取结果?
How to get results from Concurrent::Promise::all?
使用conccurrent-ruby,如何执行一组承诺然后得到结果?
这是我希望能够做的一个例子(测试通过是因为它从未到达'then'块。
it "can aggregate the results" do
Concurrent::Promise::all?(
Concurrent::Promise.execute { 42 },
Concurrent::Promise.execute { 43 },
).then do |result|
binding.pry
expect(result).to eq([42, 43])
end
end
为了执行 .all?
承诺,您需要调用 .execute
和 .wait
,这意味着它将执行然后等待结果准备好,注意 wait
是阻塞意味着它会阻塞你的代码`。
例如:
Concurrent::Promise.all?(
Concurrent::Promise.new { 42 },
Concurrent::Promise.new { 43 }
).then do |result|
puts 'finished promises'
end.execute.wait
然而,如果你希望在承诺完成后得到结果,你可以使用 .zip
方法,例如:
Concurrent::Promise.zip(
Concurrent::Promise.execute { 42 },
Concurrent::Promise.execute { 43 }
).then do |result|
expect(result).to eq([42, 43])
end.wait
注意:.zip
和 .all?
之间存在一些差异,请查看文档:https://www.rubydoc.info/gems/concurrent-ruby/Concurrent/Promise
使用conccurrent-ruby,如何执行一组承诺然后得到结果?
这是我希望能够做的一个例子(测试通过是因为它从未到达'then'块。
it "can aggregate the results" do
Concurrent::Promise::all?(
Concurrent::Promise.execute { 42 },
Concurrent::Promise.execute { 43 },
).then do |result|
binding.pry
expect(result).to eq([42, 43])
end
end
为了执行 .all?
承诺,您需要调用 .execute
和 .wait
,这意味着它将执行然后等待结果准备好,注意 wait
是阻塞意味着它会阻塞你的代码`。
例如:
Concurrent::Promise.all?(
Concurrent::Promise.new { 42 },
Concurrent::Promise.new { 43 }
).then do |result|
puts 'finished promises'
end.execute.wait
然而,如果你希望在承诺完成后得到结果,你可以使用 .zip
方法,例如:
Concurrent::Promise.zip(
Concurrent::Promise.execute { 42 },
Concurrent::Promise.execute { 43 }
).then do |result|
expect(result).to eq([42, 43])
end.wait
注意:.zip
和 .all?
之间存在一些差异,请查看文档:https://www.rubydoc.info/gems/concurrent-ruby/Concurrent/Promise