1つのアプリケーションに複数のタスクがあり、いずれの順序で終了してもよいとします。すべてのタスクが完了したら、コードを実行する必要があります。その場合、アプリケーションはAnyEventではなくCoroなしで実行されています。多重化コールバック
ある程度、AnyEventの$cv->begin/$cv->end
は、私が望むことを許しています。しかし、もっと細かい制御が必要です。例えば、私は仕事を2回「完了」することができないようにしたいと思います。すべてのタスクからデータを収集する能力も良いでしょう。
もちろん、これを行うことができます。ハッシュを共有するたくさんのコールバックを設定します。タスクが終了するたびにそのハッシュからキーを削除する。ハッシュが空のときにmegacallbackを呼び出します。私はそれを行うより文明的な方法、多分いくつかのCPANモジュールがあるのだろうか?
たとえば、私の必要性を満たす想像上のAPIがあります。
#!/usr/bin/perl -w
use strict;
use Some::Module;
# Set goals
my $cb = Some::Module->new(sub { say 'BOOM!' });
$cb->begin(qw(foo bar));
# Much later, as tasks start getting done
$cb->end(foo => 42); # "return" value from task 'foo'
$cb->begin('baz'); # can add more tasks, why not
$cb->end('bar'); # just finish task 'bar'
# still waiting for 'baz' to finish at this point
# Finally, last hanging task is done
$cb->end(baz => 137); # BOOM!
# at this point, sub {}->({ foo=>42, bar=>undef, baz=>137 })
# has been called
も私のperlmonks questionを参照してください。
このようなものがありますか?
MergePointは*頼んだものです。ありがとうございます。 – Dallaylaen
未来も有望そうです。再度、感謝します。私は2倍upvoteすることができたらいいと思う。 – Dallaylaen