- Learning Concurrency in Kotlin
- Miguel Angel Castiblanco Torres
- 227字
- 2021-08-05 10:46:48
Using a specific dispatcher when starting the coroutine
So far, we have seen how to create coroutines using async() and launch(), but in both cases we were using the default dispatcher. Consider the following code:
fun main(args: Array<String>) = runBlocking {
val task = launch {
printCurrentThread()
}
task.join()
}
Here, printCurrentThread(), as its name suggests, will just print the name of the current thread to the standard output:
fun printCurrentThread() {
println("Running in thread [${Thread.currentThread().name}]")
}
By running this code, we see that by default the coroutine will run in DefaultDispatcher, which as the time of writing is the same dispatcher as CommonPool – but be aware that this could change in the future.
If we update main() to create a CoroutineDispatcher the same way we did before, and send it to launch(), we will see that the coroutine is being executed in the thread that we indicated, for example:
fun main(args: Array<String>) = runBlocking {
val dispatcher = newSingleThreadContext(name = "ServiceCall")
val task = launch(dispatcher) {
printCurrentThread()
}
task.join()
}
The output looks like the following screenshot. Notice that the name of the thread is the same name that we set for the dispatcher:

Now we will do likewise in MainActivity:
private val dispatcher = newSingleThreadContext(name = "ServiceCall")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
launch(dispatcher) {
// TODO Call coroutine here
}
}
- 零基礎學Visual C++第3版
- Node.js 10實戰
- Azure IoT Development Cookbook
- 我的第一本算法書
- Vue.js 3.0源碼解析(微課視頻版)
- Python進階編程:編寫更高效、優雅的Python代碼
- R的極客理想:工具篇
- Visual C
- 零基礎學Python數據分析(升級版)
- 概率成形編碼調制技術理論及應用
- PhoneGap:Beginner's Guide(Third Edition)
- HTML5從入門到精通 (第2版)
- Python深度學習:基于TensorFlow
- Node.js全程實例
- Learning SciPy for Numerical and Scientific Computing(Second Edition)