Ich versuche, eine Feder @ Async-Aufgabe zu implementieren, die einen Rückgabetyp der Zukunft, hat, aber ich kann nicht wirklich herausfinden, wie es richtig geht.Frühling 3.2 @ Async-Aufgabe mit Rückgabetyp der Zukunft
- Was kann ich dabei gewinnen? werde ich jetzt eine Kontrolle über meine Aufgabe haben, damit ich sie stoppen und ausführen kann?
- Gibt es eine Referenzimplementierung, wie ich das machen kann? springource bietet keine an.
EDIT
Von Frühling Quelle und Feder refrence Handbuch:
Auch Methoden, die einen Wert zurückgeben asynchron aufgerufen werden kann. Diese Methoden benötigen jedoch , um einen Future typisierten Rückgabewert zu haben. Dies bietet weiterhin den Vorteil einer asynchronen Ausführung, so dass der Aufrufer andere Aufgaben ausführen kann, bevor er get() für diesen Future aufruft.
und es gibt ein Beispiel, wie so:
@Async
Future<String> returnSomething(int i) {
// this will be executed asynchronously
}
Wie dies korrekt zu implementieren?
Das ist, was ich gesucht habe – engma
so bedeutet dies ich kann meine Aufgabe jederzeit stoppen, wenn es nicht schon abgesagt wurde Richtig? – engma
@ Developer106 Ja, Sie können Ihre asynchrone Methode durch Aufruf von [cancel (true)] _interrupt_ (http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html#cancel (boolean)) auf dem zurückgegebenen 'Future'. Die Unterbrechung funktioniert jedoch nicht automatisch. Entweder sollte die Methode die Unterbrechung durch Aufruf von 'Thread.isInterrupted()' überprüfen oder Methoden verwenden, die 'InterruptedException' auslösen. Siehe [Interrupts] (http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html) im Java-Tutorial. –