私は一連のタスクを完了する必要があります。タスクロジックをメソッドから別のクラスにリファクタリングした後、パフォーマンスがもはや連続していることが保証されなくなりました(つまり、最初のタスクが完了する前に2番目と3番目のタスクが開始されます)。ここでは何が起こっているのですか、順次パフォーマンスを保証するにはどうしたらいいですか?Ruby - 逐次実行を実行する方法
class MyClass
def do_stuff
FirstThing.new.do_it
SecondThing.new.do_it
ThirdThing.new.do_it
end # for some reason, each doesn't wait for its predecessor to finish before starting
end
class FirstThing
def do_it
# takes a minute to complete
end
end
class SecondThing
def do_it
# takes a minute to complete
end
end
class ThirdThing
def do_it
# takes a minute to complete
end
end
EDIT:リファクタリングコードのように見える
class MyClass
def do_stuff
do_first_thing
do_second_thing
do_third_thing
end # each waits for its predecessor to finish before starting
def do_first_thing
# takes a minute to complete
end
def do_second_thing
# takes a minute to complete
end
def do_third_thing
# takes a minute to complete
end
end
:のよう
元のコードは見えないスレッド又は並列処理が起こっていない又は所望されます。
EDIT:問題を再現するために次のコードを使用しましたが、動作しているようですが、問題は別の場所にある可能性があります。進歩と結果をここに掲載します。で期待どおり
#
# OLD VERSION
#
class OldJob
def work_it
move_it
shake_it
bake_it
end
def move_it
puts "MOVING IT..."
sleep 5
end
def shake_it
puts "SHAKING IT..."
sleep 5
end
def bake_it
puts "BAKING IT..."
sleep 5
end
end
OldJob.new.work_it
puts "-----------"
#
# NEW VERSION
#
class MoveJob
def do_it
puts "MOVING IT..."
sleep 5
end
end
class ShakeJob
def do_it
puts "SHAKING IT..."
sleep 5
end
end
class BakeJob
def do_it
puts "BAKING IT..."
sleep 5
end
end
class NewJob
def work_it
MoveJob.new.do_it
ShakeJob.new.do_it
BakeJob.new.do_it
end
end
NewJob.new.work_it
結果:
ruby --->> ruby ~/Desktop/my_job.rb
MOVING IT...
SHAKING IT...
BAKING IT...
-----------
MOVING IT...
SHAKING IT...
BAKING IT...
FINAL EDIT:
だから、私はその、クラス名の一部をmisnamedていたが、複数の同様のクラスにリファクタリングする私の急いで判明彼らの処刑は起こらなかった。従属クラスは、それが行われていないため、以前のプロセスの結果にアクセスできませんでした。興味深いのは、クラス名のあいまいさに関係するエラーは見られなかったことです。根本的な原因です。
問題が解決しました。お気軽に削除してください/この質問を閉じる。
あなたのメソッドで正確に何が起こっているかについての詳細を提供したい場合は、メソッド内で非同期処理を行っているように聞こえるので、取得するためにいくつかのものを書き直す必要があります順番に評価する。 – GDP2
具体的な問題を明確にしてください。現在書かれているように、間違っていることを正確に伝えるのは難しいです。 – akuhn
ここでは@ GPD2に同意します。投稿したコードは順番に動作します。 –