Próbuję utworzyć zadanie asynchroniczne, które nie zablokuje żądania. Użytkownik wprowadza żądanie, zadanie zostanie uruchomione, a kontroler wyświetli komunikat "Zadanie jest uruchomione ...", aby uniknąć zablokowania żądania oczekującego na zakończenie zadania. Gdy zadaniem jest wykończenie, będzie wykonać onComplete i zrobić coś z wynikiem tego zadania (na przykład wywołać usługę, która wyśle wiadomość do użytkownika)Błąd zadania asynchronicznego
| Error 2014-09-16 17:38:56,721 [Actor Thread 3] ERROR gpars.LoggingPoolFactory - Async execution error: null
Kod jest następujący:
package testasync
import static grails.async.Promises.*
class TestController {
def index() {
//Create the job
def job1 = task {
println 'Waiting 10 seconds'
Thread.sleep(10000)
return 'Im done'
}
//On error
job1.onError { Throwable err ->
println "An error occured ${err.message}"
}
//On success
job1.onComplete { result ->
println "Promise returned $result"
}
render 'Job is running...'
}
Kompletna StackTrace:
| Error 2014-09-17 10:35:24,522 [Actor Thread 3] ERROR gpars.LoggingPoolFactory - Async execution error: null
Message: null
Line | Method
->> 72 | doCall in org.grails.async.factory.gpars.GparsPromise$_onError_closure2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 62 | run in groovyx.gpars.dataflow.DataCallback$1
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run . . . in java.lang.Thread
istnieje kompletny ślad? – cfrick
dodał kompletny stacktrace – agusluc