Ответ 1
Итак, согласно документации, если вы не вызываете .get()
или .waitAll()
, а просто используете onComplete
, вы можете запустить свою задачу без блокировки текущей нити.
Вот очень глупый пример, который я работал на консоли в качестве доказательства концепции.
import static grails.async.Promises.*
def p = task {
// Long running task
println 'Off to do something now ...'
Thread.sleep(5000)
println '... that took 5 seconds'
return 'the result'
}
p.onError { Throwable err ->
println "An error occured ${err.message}"
}
p.onComplete { result ->
println "Promise returned $result"
}
println 'Just to show some output, and prove the task is running in the background.'
Запуск приведенного выше примера дает вам следующий результат:
Off to do something now ...
Just to show some output, and prove the task is running in the background.
... that took 5 seconds
Promise returned the result