Muszę uruchomić dwie równoległe obliczenia i przerwać pierwszą, gdy kończy się druga. Obecnie mam wprowadziły go przy użyciu standardowych wątki Java:Jak przerwać obliczenia asynchroniczne w Scali?
/**
* 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();
}
}
Czy to samo zachowanie osiągnąć za pomocą jednoczesnego biblioteki Scala, bez użycia Thread
s jawnie?
http://stackoverflow.com/questions/14449862/kill-or-timeout-a-future-in-scala -2-10/14450095 # 14450095 – sourcedelica
Twoja implementacja z API Javy nie jest niezawodna - przerywanie nie zawsze działa zgodnie z oczekiwaniami i prawdopodobnie nigdy nie powinno być używane. Lepiej kodować wyraźnie dla wcześniejszego zakończenia - np. jak w odpowiedzi powiązanej w powyższym komentarzu. Udostępnianie AtomicBoolean jest jednym z (wielu) możliwych rozwiązań. –