メインスレッドで非同期ラムダを実行しますか?

イアン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());

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=207527&siteId=1