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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Elvis Lin
October 19, 2018
Programming
320
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
61
Dubugging Tips and Tricks for iOS development
elvismetaphor
0
71
Strategies of Facebook LightSpeed project
elvismetaphor
0
110
Background Execution And WorkManager
elvismetaphor
2
500
作為一個跨平台的 Mobile App 開發者,從入門到放棄!?
elvismetaphor
2
550
Dependency Injection for testability of iOS app
elvismetaphor
1
1.5k
MotionLayout Brief Introduction
elvismetaphor
1
360
Chapter 10. Pattern Matching with Regular Expressions
elvismetaphor
0
66
Machine Learning Application on Mobile Devices
elvismetaphor
0
130
Other Decks in Programming
See All in Programming
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
530
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.4k
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
320
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
780
net-httpのHTTP/2対応について
naruse
0
470
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
710
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
160
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
170
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
190
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
1.2k
Swiftのレキシカルスコープ管理
kntkymt
0
220
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
530
Featured
See All Featured
Visualization
eitanlees
152
17k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
140
sira's awesome portfolio website redesign presentation
elsirapls
0
280
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Bash Introduction
62gerente
615
220k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
How GitHub (no longer) Works
holman
316
150k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
140
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Skip the Path - Find Your Career Trail
mkilby
1
140
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
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