同様の質問:
ライブラリクライアント(特にスクリプトクライアント)に公開したいメソッドを持つオブジェクトが次のようにあります。
interface MyNiceInterface
{
public Baz doSomethingAndBlock(Foo fooArg, Bar barArg);
public Future<Baz> doSomething(Foo fooArg, Bar barArg);
// doSomethingAndBlock is the straightforward way;
// doSomething has more control but deals with
// a Future and that might be too much hassle for
// scripting clients
}
しかし、私が利用できる基本的な「もの」は、イベント駆動型クラスのセットです。
interface BazComputationSink
{
public void onBazResult(Baz result);
}
class ImplementingThing
{
public void doSomethingAsync(Foo fooArg, Bar barArg, BazComputationSink sink);
}
ここで、ImplementingThingは入力を受け取り、タスクキューにキューに入れるなどの難解な処理を実行し、後で結果が発生したときに、sink.onBazResult()
ImplementingThing.doSomethingAsync()が呼び出されたのと同じスレッドである場合とそうでない場合があるスレッドで呼び出されます。
スクリプトクライアントがブロッキングスレッドを喜んで待つことができるように、同時実行プリミティブとともに、私が持っているイベント駆動型関数を使用してMyNiceInterfaceを実装する方法はありますか?
編集:これにFutureTaskを使用できますか?