Kotlin DI implemented using Delegation
Kotlin 1.3 Coroutines using CoroutineScope and Dispatcher
Android Architectural Components ViewModel using CoroutineScope to tie coroutines to that ViewModel so that all coroutines started from that ViewModel will be cancelled when that ViewModel is killed