カスタムコルーチンスコープの作成

kotlin.github.io

CoroutineScopeは実装することが出来る。

interface CoroutineScope

CoroutineScope概要

launchasyncといった全てのコルーチンビルダーはCoroutineScopeを拡張し、全ての要素とキャンセルを自動的に伝播するために、そのcoroutineContextを継承する。

単独のスコープインスタンスを取得する方法は、CoroutineScope()もしくはMainScope()ファクトリ関数である。 これらが必要なくなった際は、スコープのキャンセルに対して注意を取り計らう。

追加的なcontext要素は、[plus](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/plus.html)演算子を使うことで追加することが出来る。

カスタムコルーチンの作成

import kotlinx.coroutines.*
import kotlin.coroutines.*

class CustomScope : CoroutineScope {
    // ルートjob
    val job = Job() 
    override val coroutineContext: CoroutineContext get() = job // + Dispatchers.IO Dispacherを指定しなかった場合は、Dispachers.Defaultが使用される

    fun <T> delayRun(f: ()->T): Job {
        // launchメソッドが自動導出される
        return launch {
            delay(1000)
            f()
        }
    }
}
  • launchメソッドなどが自動導出される