Ho bisogno di eseguire due calcoli paralleli e interrompere il primo quando termina il secondo. Attualmente, ho implementato utilizzando thread Java standard:Come interrompere i calcoli asincroni in Scala?
/**
* Runs <var>sup</var> in parallel with <var>main</var>.
* Terminate (interrupt) it when <var>main</var> finishes.
*/
def support[R](sup: => Unit, main: => R): R = {
val supThread = new Thread {
override def run = { sup };
}
supThread.start();
try {
main;
} finally {
supThread.interrupt();
}
}
Può lo stesso comportamento essere raggiunto utilizzando la libreria concomitante di Scala, senza l'utilizzo di Thread
s esplicitamente?
http://stackoverflow.com/questions/14449862/kill-or-timeout-a-future-in-scala -2-10/14450095 # 14450095 – sourcedelica
L'implementazione con l'API Java non è affidabile: l'interrupt non funziona sempre come previsto e probabilmente non dovrebbe mai essere utilizzato. È preferibile codificare esplicitamente la terminazione anticipata, ad es. come nella risposta collegata nel commento sopra. La condivisione di un AtomicBoolean è una delle (molte) possibili soluzioni. –