Kotlin Coroutines de la manera correcta en Android

Estoy tratando de actualizar una lista dentro del adaptador usando asíncrono, puedo ver que hay demasiada repetitiva.

¿Es la forma correcta de usar Kotlin Coroutines?

¿Se puede optimizar esto más?

fun loadListOfMediaInAsync() = async(CommonPool) {
        try {
            //Long running task 
            adapter.listOfMediaItems.addAll(resources.getAllTracks())
            runOnUiThread {
                adapter.notifyDataSetChanged()
                progress.dismiss()
            }
        } catch (e: Exception) {
            e.printStackTrace()
            runOnUiThread {progress.dismiss()}
        } catch (o: OutOfMemoryError) {
            o.printStackTrace()
            runOnUiThread {progress.dismiss()}
        }
    }

Respuestas a la pregunta(7)

Su respuesta a la pregunta