Ian Rehwinkel:
Tengo algo de código asíncrono en mi proyecto que ejecuta una lambda que toma varios segundos para correr, y ejecuta otra lambda al término de la primera. Algo como esto:
CompletableFuture.supplyAsync(() -> {
return longExecution("Hello Test");
}).thenAccept(text -> {
mustBeInMainThread(text);
});
Ahora bien, esto es sólo un ejemplo. Pero necesito la thenAccept
ejecución lambda suceda en el hilo principal, y no en un hilo separado.
Es esto posible, y si es así, ¿cómo puedo lograr esto?
ernest_k:
No se puede decir que se ejecute en el hilo principal usando construcciones del futuro, pero se puede obtener el resultado y usarlo:
CompletableFuture<MyObject> future =
CompletableFuture.supplyAsync(() -> longExecution("Hello Test"));
//do other things in main thread while async task runs
A continuación, puede utilizar el resultado en el hilo principal de espera:
//get result and call method in main thread:
mustBeInMainThread(future.join());