Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Briefly Introduction of Kotlin coroutines
Search
Elvis Lin
October 19, 2018
Programming
330
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Briefly Introduction of Kotlin coroutines
Introduce basic concepts of Kotlin coroutines
Elvis Lin
October 19, 2018
More Decks by Elvis Lin
See All by Elvis Lin
Protect Users' Privacy in iOS 14
elvismetaphor
0
62
Dubugging Tips and Tricks for iOS development
elvismetaphor
0
73
Strategies of Facebook LightSpeed project
elvismetaphor
0
110
Background Execution And WorkManager
elvismetaphor
2
510
作為一個跨平台的 Mobile App 開發者,從入門到放棄!?
elvismetaphor
2
560
Dependency Injection for testability of iOS app
elvismetaphor
1
1.5k
MotionLayout Brief Introduction
elvismetaphor
1
370
Chapter 10. Pattern Matching with Regular Expressions
elvismetaphor
0
72
Machine Learning Application on Mobile Devices
elvismetaphor
0
140
Other Decks in Programming
See All in Programming
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
620
はてなアカウント基盤 State of the Union
cockscomb
1
1.2k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.6k
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
160
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.7k
Creating Composable Callables in Contemporary C++
rollbear
0
180
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
150
Oxlintのカスタムルールの現況
syumai
6
1.2k
どこまでゆるくて許されるのか
tk3fftk
0
290
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
160
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
220
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
16
8.3k
Featured
See All Featured
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Abbi's Birthday
coloredviolet
3
8.4k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Paper Plane
katiecoart
PRO
1
52k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
WCS-LA-2024
lcolladotor
0
670
Building AI with AI
inesmontani
PRO
1
1.1k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
370
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Transcript
Kotlin Coroutines, 從入⾨門到入⾨門 Elvis Lin(@elvismetaphor) Taiwan 2018 #JCConf
關於我 • Elvis Lin • Android, iOS 與 React Native
永遠的初學者 • Twitter: @elvismetaphor • Blog: https://blog.elvismetaphor.me #JCConf Taiwan 2018
⼤大綱 • 循序處理理 • 並⾏行行處理理與Multi-thread • Why Coroutines? • 基本的使⽤用⽅方式
#JCConf Taiwan 2018
循序處理理 #JCConf Taiwan 2018 Main
循序處理理的程式 fun main(args: Array<String>) { println("First") println("Second") println(“Third") } #JCConf
Taiwan 2018
循序處理理的程式與Thread fun main(args: Array<String>) { println("First") printDelayed(“Second") println("Third") } fun
printDelayed(message: String) { Thread.sleep(1000) println(message) } #JCConf Taiwan 2018
循序處理理的程式與 Coroutines fun main(args: Array<String>) { println(“First") runBlocking { printDelay("Second")
} println("Third") } suspend fun printDelay(message: String) { delay(1000) println(message) } #JCConf Taiwan 2018
循序處理理的程式 與 Coroutines(簡易易版) fun main(args: Array<String>) { println(“First") runBlocking {
delay(1000) println(“Second”) } println("Third") } #JCConf Taiwan 2018
並⾏行行處理理 (Multi-thread) #JCConf Taiwan 2018 Main Other
並⾏行行處理理的程式與 Thread fun main(args: Array<String>) { println("First") printNonBlocking("Second") println("Third") }
fun printNonBlocking(message: String) { Thread { Thread.sleep(1000) println(message) }.start() } // Output: First Third Second
並⾏行行處理理的程式與 coroutines fun main(args: Array<String>) { println("First") launch { printDelay("Second")
} println("Three") } suspend fun printDelay(message: String) { delay(1000) println(message) } // Output: First Third Second #JCConf Taiwan 2018
Why Coroutines #JCConf Taiwan 2018
Coroutines • Coroutines are like very light-weight thread • Coroutines
computations can be done without blocking other threads. • Coroutine 的執⾏行行可以更更有效地利利⽤用原本已經建立在 ThreadPool 裡⾯面的 Threads #JCConf Taiwan 2018
常⽤用的關鍵字 • suspend • delay • launch • runBlocking •
await • async #JCConf Taiwan 2018
suspend • ⼀一個 modifier • ⼀一個 suspend 的 function 只可以被
suspend function 或另⼀一 個 coroutine 呼叫 #JCConf Taiwan 2018
launch • 執⾏行行⼀一個 async 的 job #JCConf Taiwan 2018 launch
{ anSimpleFunction() }
runBlocking • 執⾏行行⼀一個 sync 的 job #JCConf Taiwan 2018 runBlocking
{ anSimpleFunction() }
async & await • aysnc {…} 會回傳⼀一個 Deferred<T> • 在回傳的
deferred 上⾯面加上 await 會獲得值 #JCConf Taiwan 2018 val value = async {calculate(1)}.await()
Live Demo https://gist.github.com/elvismetaphor/ 810712e3a08863c963c871f1bca0b3f2 #JCConf Taiwan 2018
Coroutines v.s. RxJava • Coroutines: 更更輕量量,更更容易易將原本循序式的程式改成非同 步、並⾏行行處理理的⽅方式 • RxJava: 提供更更豐富的
operators 做 stream 的轉換 • 根據你的使⽤用情境挑選適合的 library #JCConf Taiwan 2018
總結 • Coroutine 提供⼀一個類似 Thread 的功能,但是更更輕量量的操 作 • Coroutine 讓你可以容易易的將原本同步操作的邏輯轉換成非
同步操作的邏輯 #JCConf Taiwan 2018
參參考資料 • https://kotlinlang.org/docs/reference/coroutines- overview.html • Introduction to coroutines: https://youtu.be/_hfBv0a09Jc •
Exploring coroutines in Kotlin: https://youtu.be/ jT2gHPQ4Z1Q #JCConf Taiwan 2018
Thank you :) #JCConf Taiwan 2018