関連記事:【Kotlin/JVM】CoroutineDispatcher を作る
次のようにすることで Looper を持つスレッドの CoroutineDispatcher を作ることができる。
import android.os.Handler
import android.os.HandlerThread
import kotlinx.coroutines.*
import kotlinx.coroutines.android.HandlerDispatcher
import kotlinx.coroutines.android.asCoroutineDispatcher
val handlerDispatcher: HandlerDispatcher =
    HandlerThread("HandlerThreadDispatcher")
        .apply { start() }
        .looper
        .let { Handler(it) }
        .asCoroutineDispatcher()
HandlerDispatcher クラスは Dispatchers.Main の型である MainCoroutineDispatcher を継承しており1、Dispatchers.Main と同じく immediate プロパティを持つ。
Realm では、メインスレッドではない、Looper を持つスレッドが必要になることがある。
そのときにはこの方法を使うとコルーチンで扱うことができて便利だ。
/以上
- 
型名からは継承関係が逆のように感じるが…。 ↩