イアンRehwinkel:
私は実行するために、数秒かかりラムダを実行し、私のプロジェクトでは、いくつかの非同期コードを持っており、最初の完了時に別のラムダを実行します。やや、このように:
CompletableFuture.supplyAsync(() -> {
return longExecution("Hello Test");
}).thenAccept(text -> {
mustBeInMainThread(text);
});
さて、これは単なる一例です。しかし、私は必要なthenAccept
メインスレッドではなく、別のスレッドで発生するラムダの実行を。
これはすべての可能であり、そうであれば、どのように私はこれを達成することができますか?
ernest_k:
あなたは将来の構築物を用いて、メインスレッドで実行するよう指示することはできませんが、結果を取得し、それを使用することができます。
CompletableFuture<MyObject> future =
CompletableFuture.supplyAsync(() -> longExecution("Hello Test"));
//do other things in main thread while async task runs
その後、待機していることにより、メインスレッドで結果を使用することができます。
//get result and call method in main thread:
mustBeInMainThread(future.join());