import kotlinx.coroutines.* fun main(args: Array<String>) { var job: Job? = null runBlocking<Unit> { job = GlobalScope.launch { println("GHello", 300) println("GWorld\n", 500) } } job?.cancel() runBlocking<Unit> { job = launch { println("Hello", 300) println("World\n", 500) } } job?.cancel() } private suspend fun println(msg: String, millis: Long) = coroutineScope { delay(millis) println(msg) }
runBlockingメソッドは引数のブロックを実行中そのスレッドを中断していて比較的どこでも使えるので便利
GlobalScopeは非同期処理の時よく使う
とりあえずメソッドはsuspendとcoroutineScopeを使っておけばなんとかなる
coroutineScopeはrunBlockと似ているけど呼び出し元のJobをオーバーライドしてくれるので非同期処理をまとめて管理するのにちょうどいい
他にもChannelがいい感じに使えそうだと感じた