5
バックグラウンドスレッドで順番に実行したいタスクがあります。各タスクの結果は次のスレッドに渡されます。チェーンが失敗する。Concurrent Rubyで一連のタスクを連鎖する
引数として、各タスクが値を返すexec
メソッドを持つオブジェクトであるとしましょうが、それらはprocsまたはlambdasと同じくらい良いかもしれませんが。どちらかPromise
APIや他の場所で同時Rubyで、
promise = array_of_tasks.inject(nil) do |promise, task|
if promise
promise.then { |prev_result| task.exec(prev_result) }
else
Concurrent::Promise.new { task.exec }
end
end
promise.on_success { |last_result| log.info("Success: #{last_result} ")}
promise.rescue { |reason| log.error("Failure: #{reason}")}
これを行うために、より簡潔な方法があります:
のようなものは、私が今持っているのですか?それはかなり基本的な操作のようですが、私はそれを行う既存の方法を見ていません。
(このような方法がない場合、未来の約束の世界にこのパターンのよく知られた名前がありますか?つまり、自分でメソッドを書くと、 ?