この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
kotlin:coroutines [2020/01/14 06:31] ips |
kotlin:coroutines [2020/01/14 07:03] (現在) ips [まとめ] |
||
---|---|---|---|
ライン 230: | ライン 230: | ||
コルーチン内で他のコルーチンの終了を待機する。 | コルーチン内で他のコルーチンの終了を待機する。 | ||
- | <code> | + | <code kotlin> |
fun TestCoroutin(){ | fun TestCoroutin(){ | ||
Log.d( "coroutine","start") | Log.d( "coroutine","start") | ||
ライン 257: | ライン 257: | ||
launch { | launch { | ||
Log.d( "coroutine","coroutin_inner") | Log.d( "coroutine","coroutin_inner") | ||
- | }.join() | + | }.join() // 待つ |
Log.d( "coroutine","coroutin_outer") | Log.d( "coroutine","coroutin_outer") | ||
ライン 266: | ライン 266: | ||
2020-01-14 06:30:51.472 8058-8058/com.nekotype.ips.coroutine D/coroutine: start | 2020-01-14 06:30:51.472 8058-8058/com.nekotype.ips.coroutine D/coroutine: start | ||
2020-01-14 06:30:51.500 8058-8058/com.nekotype.ips.coroutine D/coroutine: end | 2020-01-14 06:30:51.500 8058-8058/com.nekotype.ips.coroutine D/coroutine: end | ||
- | 2020-01-14 06:30:51.505 8058-8111/com.nekotype.ips.coroutine D/coroutine: coroutin_inner | + | 2020-01-14 06:30:51.505 8058-8111/com.nekotype.ips.coroutine D/coroutine: coroutin_inner //順番が変わる |
- | 2020-01-14 06:30:51.508 8058-8110/com.nekotype.ips.coroutine D/coroutine: coroutin_outer | + | 2020-01-14 06:30:51.508 8058-8110/com.nekotype.ips.coroutine D/coroutine: coroutin_outer //順番が変わる |
</code> | </code> | ||
+ | |||
+ | |||
+ | ===== runBlockingとasync ===== | ||
+ | runBlockingとasyncは戻り値をもつことができる。 | ||
+ | asyncは非同期に処理する。asyncにはawaitでまつことができる。 | ||
+ | |||
+ | ===== まとめ ===== | ||
+ | |||
+ | UIにアクセスするには | ||
+ | GlobalScope.launch(Dispatchers.Main) {... | ||
+ | |||
+ | Jobを取得してキャンセルするには | ||
+ | myjob=GlobalScope.launch { ... | ||
+ | myjob.cancel() | ||
+ | |||
+ | 戻り値を取得するには | ||
+ | runBlocking | ||
+ | async | ||
+ | |||
+ | 待ちたいとき(同期) | ||
+ | GlobalScope.launch() { | ||
+ | launch { ... }.join() | ||
+ | |||
+ | 待ちたいとき(非同期) | ||
+ | GlobalScope.launch() { | ||
+ | async { ... }.await() |