Как вернуть результат Executors.newFixedThreadPool на Кotlin

Читаю при помощи DAO - список из базы List<Currency>, код этот расположен внутри ViewModel.

private val db = AppDatabase.getInstance(getApplication())
private val dao = db!!.CurrencyDao()
private val service = Executors.newFixedThreadPool(1)

Таким методом

 fun getLast():List<Currency>
{
    var x:List<Currency> = emptyList()
    service.submit {
        x = dao.getLast()
    }
    service.shutdown()
    return x
}

Но из за того что поток выполняется в фоне не успевает возвращаться результат. Каким способом можно принудительно дождать результат выполнения потока.


Ответы (1 шт):

Автор решения: Oleg Aleksandrov

Вам нужно явно вызвать ожидание завершение задачи, например это можно сделать следующим образом:

val task = service.submit {
    x = dao.getLast()
}

// that method waits if necessary for the computation to complete, and then retrieves its result.
task.get()

service.shutdown()
→ Ссылка