So habe ich einige Server-Code mit einem Endpunkt, wo ich Sachen asynchron ausführen möchte. Zu diesem Zweck verwende ich Futures. Es gibt Aufgaben, die zu dem Ergebnis führen, aber es gibt auch teuer IO Aufgaben, die dies nicht tun, so führe ich sie in einem Feuer und vergessen Zukunft etwa so:Scala Testen mit Feuer und vergessen Futures
import scala.concurrent.Future
val ec = scala.concurrent.ExecutionContext.global
Future {
Thread.sleep(10000)
println("Done")
}(ec)
println("Exiting now")
Ausgabe das heißt:
import scala.concurrent.Future
ec: scala.concurrent.ExecutionContextExecutor = [email protected]
res0: scala.concurrent.Future[Unit] = [email protected]
Exiting now
res1: Unit =()
Normalerweise auf dem Server ist dies nicht so ein großes Problem, weil der Kontext weiterläuft, da er andere Aufgaben erhält und damit die IO fertigstellen kann. Aber wenn ich teste, endet der Test und die Aufgaben drinnen beginnen zu werfen, weil die Dienste, die sie benutzen, nicht verfügbar sind.
Die Frage ist also: Wie warte ich auf diese Feuer und vergiss Futures ohne auch meine Hauptausführung zu blockieren?
Sie müssen auf jeden Fall die Hauptausführung blockieren. – Nyavro
Können Sie auch den Testcode einfügen. – curious
@Nyavro Das möchte ich wirklich nicht. Fehler werden auf dem Server protokolliert und müssen nicht an den Client weitergegeben werden. Wir sprechen davon, 3-5 Sekunden zur Reaktionszeit hinzuzufügen, wenn ich auf das IO warte. – mirosval