Sto tentando di implementare un task spring @Async che ha un tipo di ritorno di Future, ma non riesco a capire come farlo correttamente.Spring 3.2 @Async task con tipo di ritorno del futuro
- Che cosa otterrò facendo così? ora avrò un controllo sul mio compito in modo che possa fermarlo ed eseguirlo?
- Esiste un'implementazione di riferimento su come posso farlo? SpringSource non ne fornisce.
EDIT
Da sorgenti molla e manuale molla refrence:
Anche metodi che restituiscono un valore può essere richiamato in modo asincrono. Tuttavia, tali metodi sono richiesti per avere un valore di ritorno digitato per futuro. Ciò offre ancora il vantaggio dell'esecuzione asincrona in modo che il chiamante possa eseguire altre attività prima di chiamare get() su quel futuro.
e dà un esempio in questo modo:
@Async
Future<String> returnSomething(int i) {
// this will be executed asynchronously
}
Come implementare correttamente questo?
questo è quello che stavo cercando – engma
quindi questo significa che io può interrompere il mio compito in qualsiasi momento se non è già stato cancellato? – engma
@ Developer106 Sì, è possibile _interrupt_ il metodo asincrono chiamando [cancel (true)] (http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html#cancel (booleano)) sul 'futuro' restituito. Ma l'interruzione non funziona automaticamente. O il metodo dovrebbe controllare l'interruzione chiamando 'Thread.isInterrupted()' o utilizzare metodi che generano 'InterruptedException'. Vedi [Interrupts] (http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html) in The Java Tutorial. –