Kotlin coroutines в Android: зачем использовать bg () из Anko вместо async ()?

Я начал использовать Kotlin coroutines на Android сегодня, и я заметил, что у Anko есть свой набор вспомогательных методов для них. Я понимаю, почему asReference() существует, но я не могу понять, почему работает bg() , учитывая, что в core coroutines lib уже есть async() .

Код bg() довольно прост и использует async() внутри:

 @PublishedApi internal var POOL = newFixedThreadPoolContext(2 * Runtime.getRuntime().availableProcessors(), "bg") inline fun <T> bg(crossinline block: () -> T): Deferred<T> = async(POOL) { block() } 

Итак, в чем преимущество использования bg() вместо async() ? Является ли async() неэффективным для Android-приложений?

Как вы можете видеть, bg использует POOL как свой CoroutineDispatcher , читайте об этом здесь .

В основном эта функция существует только для объединения пула, в котором выполняются эти задачи. Использование async напрямую потребует от вас предоставления одного. Таким образом, каждая задача, запущенная через bg , будет выполнена в том же пуле.