2

現在、次のように機能するPromiseというクラスがあります。

  1. それは将来の価値を保持します
  2. 将来の値をパラメーターとして使用する後続のアクションを常に受け​​入れることができます
  3. 値が完了すると、関数キューが起動します
  4. 将来が完了した後に追加された機能はすべて同期して発生します

つまり、これは、Javaに詰め込んでいる関数型プログラミングのデザインパターンのようです。重要なことは、遅延イベントをデイジーチェーン接続できることです。これは、C#3.0言語に組み込まれた機能であると理解していますが、Javaクラスと一緒にハックする必要があります。残念ながら、1つは、「promise」または「future」よりも適切な名前を知りません。これは、「DelayedCallStack」よりも手元の値に焦点が当てられているため、誤解を招くように思われます。2つは、わかりません。独自のかなり複雑なPromiseクラスを作成する以外に、これを行う方法はありません。理想的には、これを機能的なJavaライブラリから削除したいのですが、これまでのところ、この概念はわかりません。

注Javaは、パラメーターを受け取る非同期コールバックの言語/ライブラリサポートさえ提供していません。これが、これを見つけることができることについて私が非常に悲観的である理由の1つです。

それで、このパターンは何ですか、それは図書館で行うことができますか?

4

2 に答える 2

3

Guava の ListenableFuture を見てみましょう。

http://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained

ListenableFuture を使用すると、Future 計算が完了したときに実行されるコールバックを追加できます。コールバックが実行されるスレッド プールを制御できるため、同期的または非同期的に実行できます。

于 2012-07-10T19:23:57.250 に答える
2

Flex (ActionScript) でほぼ同じものを実装し、それを Promise とも呼んでいるとしか言えません。Clojure では、Promise はかなり軽量なものです。それに対するget操作は、別のスレッドが Promise になるまでブロックされますdeliver。基本的には 1 要素のキューですが、その値が永久に保持されるため、後続getの は常に成功します。

あなたが持っているのは、その価値の観察者と結びついた一種の約束です。まさにそのケースをカバーする特別な用語は知りません。

編集

ここで、あなたの「約束/未来」が将来の価値を生み出すコードを所有している可能性があることに気付きました (少なくとも、そうであるかどうかは完全には明らかではありません)。私が言及した ActionScript の実装はそうではありませんでした。Clojure のように動作し、値は外部から供給されました。これが未来と約束の重要な違いだと思います。

于 2012-07-10T19:27:23.953 に答える