SlideShare a Scribd company logo
Introduction	to	Kotlin	
Coroutines
Async	made	easy
Presented	at	GeekOut 2017
/Roman	Elizarov	@	JetBrains
Speaker:	Roman	Elizarov
• 16+	years	experience
• Previously	developed	high-perf	
trading	software	@	Devexperts
• Teach	concurrent	&	distributed	
programming	@	St.	Petersburg	
ITMO	University
• Chief	judge	@	Northeastern	
European	Region	of	ACM	ICPC	
• Now	work	on	Kotlin	@	JetBrains
Disclaimer
• Most	ideas	presented	herein	are	very	old
• Simula ‘67	was	one	of	the	first	languages	to	
introduce	coroutines
• detach	– was	a	coroutine	suspension	statement
• resume	– was	to	resume	coroutine	execution
• CLU	‘75	was	the	first	language	with	generators and	
Icon	‘77	was	prominently	using	them	
• Coroutines	fell	out	of	favor	due	to	emergence	of	
multithreading
• And	now	they	are	back	to	write	asynchronous	code
Why	asynchronous	code?
1
2
3
Can	be	done	with	threads!
Real	need	for	async	when	…
ü You	cannot	afford	threads
• They	are	expensive	to	keep	and	to	switch
• High-load	server-side,	micro-tasks,	etc
ü You	cannot	do	threads	
• You	code	is	single	thread	only
• JS/web	target,	μC,	etc
ü You	do	not	want	threads
• You	have	lot	of	mutable	state	
• Mobile/Desktop	UI	apps,	etc
Introduction to Kotlin coroutines
Introduction to Kotlin coroutines
It	is	all	about	scalability
Classic	async	- callbacks
This	is	simplified.	Handling	
exceptions	makes	it	a	real	mess
callback
async
Obligatory	“callback	hell”	image
Futures/Promises/rx.Single
Propagates	exceptions
promise
composable
No	nesting	indentation
compose
accept
apply
handle
map
flatMap
merge lift
just
supply
CompletableFuture rx.Single
Remembering	all	those	combinators
onEach
Using	Kotlin	coroutines
explicit	coroutine	context
1
2
3
suspending	function natural	signature
Bonus	features
• Regular	loops
• Regular	exception	handing
• Regular	high-level	operators	
• let,	apply,	repeat,	forEach,	filter,	map,	use,	etc
Everything	like	in	blocking	code
Blocking	threads
Callbacks
Promises/Futures/Rx
Kotlin	coroutines
How	does	it	work?
A	short	peek	behind	the	scenes
Kotlin	suspending	functions
callback
Kotlin
Java/JVM
Continuation	is	a	generic	callback	interface
Code	with	suspension	points
Kotlin
Java/JVM
Compiles	to	state	machine	
(simplified	code	shown)
Using	coroutines
Get	fun	and	profit
How	to	suspend? Some	3rd party	
callback-based	IO	lib
mark	with	suspend
1
2
3
continuation
4
callback
It	is	ready	to	use	from	coroutines!
Inspired	by	call/cc	from	Scheme
Building	higher-level	functions
Build	higher-level	
abstractions	the	usual	way
mark	with	suspend
Make	it	one-liner	… because	Kotlin!
A	digression	on	async/await
async function preparePost() {
let request = composeTokenRequest();
let result = await makeRequest(request);
return result.parseToken();
}
async function preparePost(): Promise<Token> {
let request = composeTokenRequest();
let result = await makeRequest(request);
return result.parseToken();
}
JS	approach	to	the	same	
problem	(also	TS,	C#,	Dart,	etc)
mark	with	async
use	await	to	suspend
JS
Why	no	await keyword	in	Kotlin?
The	problem	with	async
makeRequest(request) VALID – produces	Promise<Result>
await makeRequest(request) VALID – produces Result
concurrent	&	async	behavior
sequential	behavior
The	most	needed one,	yet	the	most	syntactically	
clumsy,	esp.	for	suspend-heavy	(CSP)	code	style
Kotlin	suspending	functions	
are	designed	to	imitate	
sequential behavior	
by	default	
Concurrency	is	hard
Concurrency	has	to	be	explicit
Starting	coroutines
We	need	a	function	that	provides	a	
coroutine	context	for	us.	They	are	
called	coroutine	builders.
One	cannot	simply	invoke	
a	suspending	function
Launch
Fire	and	forget!
Returns	immediately,	coroutine	
works	in	background	threads
Context	defines	execution	
policy	(thread	pool)
UI	Context
Just	change	the	context
And	it	gets	executed	on	UI	thread
Coroutines	are	like	
very light-weight	threads
This	coroutine	builder	runs	coroutine	in	
the	context	of	invoker	thread
Launch	returns	
Job object
We	can	join	to	a	job	
just	like	to	a	thread
1
2
Try	that	with	100k	threads!
Kotlin	approach	to	async
async function doSomething(): Promise<Result> {
/* ... */
}
Sometimes	you	need the	Promise	and	async	
let request1 = doSomething();
let request2 = doSomething();
1
2
To	start	multiple	operations	
concurrently
await request1;
await request2;
JS
and	then	wait	for	them
async	builder
await	function
Returns	Deferred<Result>
Suspends	until	deferred	is	complete
Recap
• Coroutine	builders
• launch
• runBlocking
• async
• Suspending	functions	with	suspend keyword
• Can	nest	to	any	depth
(not	stackless)
• suspendCoroutine
Regular	
world
Coroutine
Coroutine Callback
Coroutine Coroutine
Wrap	up
Status	and	more
Library	vs	language
• Kotlin	language only	has	suspend keyword
• Transforms	suspend	functions	to	callbacks
• Compiles	code	to	state	machines
• stdlib has	Continuation and	CoroutineContext
• Everything	else	is	in	a	library
• It	includes	launch/join,	async/await,	runBlocking,	etc
• We	were	using	kotlinx.coroutines library
• http://github.com/kotlin/kotlinx.coroutines
• You	can	study	source	and	contribute
It	is	designed	to	be	composable
Mix	&	match	different	libs
Experimental	status	of	coroutines
• This	design	is	new and	unlike	mainstream
• For	some	very	good	reasons
• We	want	community	to	try	it	for	real
• So	we	released	it	as	an	experimental feature
• We	guarantee	backwards	compatibility
• Old	code	compiled	with	coroutines	continues	to	work
• We	reserve	the	right	to	break	forward	compatibility
• We	may	add	things	so	new	code	may	not	run	w/old	RT
• Design	will	be	finalized	at	a	later	point
• Old	code	will	continue	to	work	via	support	library
• Migration	aids	to	the	final	design	will	be	provided
opt-in	flag
Can	I	use	it	in	production?
Yes!	You	should.
There	is	more
• Channels/Actors
• Selection	and	synchronization
• Job	hierarchies	and	cancellation
• buildSequence/yield
• Restricted	(sync)	suspension
• Interop	with	other	futures/promise/reactive	libs	
• The	actual	implementation	details
• Learn	more	in	Guide	to	kotlinx.coroutines	by	example
• KotlinConf on	2-3	November,	2017	in	SF
Thank	you
Any	questions?
Slides	are	available	at	www.slideshare.net/elizarov
email	me	to	elizarov at	gmail
relizarov
Ad

Recommended

Introduction to kotlin coroutines
Introduction to kotlin coroutines
NAVER Engineering
 
Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017
Roman Elizarov
 
Kotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is coming
Kirill Rozov
 
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
Toshiaki Maki
 
Introduction to Koltin for Android Part I
Introduction to Koltin for Android Part I
Atif AbbAsi
 
Jetpack Compose a new way to implement UI on Android
Jetpack Compose a new way to implement UI on Android
Nelson Glauber Leal
 
Build RESTful API Using Express JS
Build RESTful API Using Express JS
Cakra Danu Sedayu
 
Digital light processing
Digital light processing
Ramrao Desai
 
Junit
Junit
FAROOK Samath
 
JavaScript Promises
JavaScript Promises
L&T Technology Services Limited
 
JavaScript Promises
JavaScript Promises
Derek Willian Stavis
 
Android kotlin coroutines
Android kotlin coroutines
Bipin Vayalu
 
Intro to Asynchronous Javascript
Intro to Asynchronous Javascript
Garrett Welson
 
Coroutines in Kotlin
Coroutines in Kotlin
Alexey Soshin
 
From Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHP
Albert Chen
 
JavaScript: Variables and Functions
JavaScript: Variables and Functions
Jussi Pohjolainen
 
Spring Boot
Spring Boot
Jaran Flaath
 
Introduction to kotlin
Introduction to kotlin
NAVER Engineering
 
Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017
Roman Elizarov
 
Asynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & Promises
Hùng Nguyễn Huy
 
Kotlin for Android Development
Kotlin for Android Development
Speck&Tech
 
Idiomatic Kotlin
Idiomatic Kotlin
intelliyole
 
Java And Multithreading
Java And Multithreading
Shraddha
 
Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
JAX London
 
Intro to kotlin
Intro to kotlin
Tomislav Homan
 
Rust
Rust
Chih-Hsuan Kuo
 
API for Beginners
API for Beginners
Sébastien Saunier
 
REST APIs with Spring
REST APIs with Spring
Joshua Long
 
Eclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimes
Mark Stoodley
 
Scratching the itch, making Scratch for the Raspberry Pie
Scratching the itch, making Scratch for the Raspberry Pie
ESUG
 

More Related Content

What's hot (20)

Junit
Junit
FAROOK Samath
 
JavaScript Promises
JavaScript Promises
L&T Technology Services Limited
 
JavaScript Promises
JavaScript Promises
Derek Willian Stavis
 
Android kotlin coroutines
Android kotlin coroutines
Bipin Vayalu
 
Intro to Asynchronous Javascript
Intro to Asynchronous Javascript
Garrett Welson
 
Coroutines in Kotlin
Coroutines in Kotlin
Alexey Soshin
 
From Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHP
Albert Chen
 
JavaScript: Variables and Functions
JavaScript: Variables and Functions
Jussi Pohjolainen
 
Spring Boot
Spring Boot
Jaran Flaath
 
Introduction to kotlin
Introduction to kotlin
NAVER Engineering
 
Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017
Roman Elizarov
 
Asynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & Promises
Hùng Nguyễn Huy
 
Kotlin for Android Development
Kotlin for Android Development
Speck&Tech
 
Idiomatic Kotlin
Idiomatic Kotlin
intelliyole
 
Java And Multithreading
Java And Multithreading
Shraddha
 
Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
JAX London
 
Intro to kotlin
Intro to kotlin
Tomislav Homan
 
Rust
Rust
Chih-Hsuan Kuo
 
API for Beginners
API for Beginners
Sébastien Saunier
 
REST APIs with Spring
REST APIs with Spring
Joshua Long
 
Android kotlin coroutines
Android kotlin coroutines
Bipin Vayalu
 
Intro to Asynchronous Javascript
Intro to Asynchronous Javascript
Garrett Welson
 
Coroutines in Kotlin
Coroutines in Kotlin
Alexey Soshin
 
From Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHP
Albert Chen
 
JavaScript: Variables and Functions
JavaScript: Variables and Functions
Jussi Pohjolainen
 
Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017
Roman Elizarov
 
Asynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & Promises
Hùng Nguyễn Huy
 
Kotlin for Android Development
Kotlin for Android Development
Speck&Tech
 
Idiomatic Kotlin
Idiomatic Kotlin
intelliyole
 
Java And Multithreading
Java And Multithreading
Shraddha
 
Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
Android | Android Activity Launch Modes and Tasks | Gonçalo Silva
JAX London
 
REST APIs with Spring
REST APIs with Spring
Joshua Long
 

Similar to Introduction to Kotlin coroutines (20)

Eclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimes
Mark Stoodley
 
Scratching the itch, making Scratch for the Raspberry Pie
Scratching the itch, making Scratch for the Raspberry Pie
ESUG
 
Isomorphic Kotlin
Isomorphic Kotlin
Benjamin Snider
 
Future of Kotlin - How agile can language development be?
Future of Kotlin - How agile can language development be?
Andrey Breslav
 
2018-09 - F# and Fable
2018-09 - F# and Fable
Eamonn Boyle
 
Craft Beer & Clojure
Craft Beer & Clojure
Metosin Oy
 
Intro to elixir and phoenix
Intro to elixir and phoenix
Jared Smith
 
Eclipse OMR: a modern, open-source toolkit for building language runtimes
Eclipse OMR: a modern, open-source toolkit for building language runtimes
Dev_Events
 
Monorepo at Pinterest
Monorepo at Pinterest
Suman Karumuri
 
Kotlin Multiplatfom In Action
Kotlin Multiplatfom In Action
Marko Mitic
 
Go - A Key Language in Enterprise Application Development?
Go - A Key Language in Enterprise Application Development?
C4Media
 
Kotlin Multiplatfom In Action
Kotlin Multiplatfom In Action
Marko Mitic
 
Introduction to course
Introduction to course
nikit meshram
 
Building a Cross-Platform Mobile SDK in Rust.pdf
Building a Cross-Platform Mobile SDK in Rust.pdf
IanWagner13
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET
Dmytro Mindra
 
Putting Compilers to Work
Putting Compilers to Work
SingleStore
 
CSP: Huh? And Components
CSP: Huh? And Components
Daniel Fagnan
 
Scalable game-servers-tgc
Scalable game-servers-tgc
Ashkan Saeedi Mazdeh
 
CSP: Huh? And Components
CSP: Huh? And Components
Daniel Fagnan
 
'Full Stack Kotlin' Workshop at KotlinConf
'Full Stack Kotlin' Workshop at KotlinConf
Garth Gilmour
 
Eclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimes
Mark Stoodley
 
Scratching the itch, making Scratch for the Raspberry Pie
Scratching the itch, making Scratch for the Raspberry Pie
ESUG
 
Future of Kotlin - How agile can language development be?
Future of Kotlin - How agile can language development be?
Andrey Breslav
 
2018-09 - F# and Fable
2018-09 - F# and Fable
Eamonn Boyle
 
Craft Beer & Clojure
Craft Beer & Clojure
Metosin Oy
 
Intro to elixir and phoenix
Intro to elixir and phoenix
Jared Smith
 
Eclipse OMR: a modern, open-source toolkit for building language runtimes
Eclipse OMR: a modern, open-source toolkit for building language runtimes
Dev_Events
 
Kotlin Multiplatfom In Action
Kotlin Multiplatfom In Action
Marko Mitic
 
Go - A Key Language in Enterprise Application Development?
Go - A Key Language in Enterprise Application Development?
C4Media
 
Kotlin Multiplatfom In Action
Kotlin Multiplatfom In Action
Marko Mitic
 
Introduction to course
Introduction to course
nikit meshram
 
Building a Cross-Platform Mobile SDK in Rust.pdf
Building a Cross-Platform Mobile SDK in Rust.pdf
IanWagner13
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET
Dmytro Mindra
 
Putting Compilers to Work
Putting Compilers to Work
SingleStore
 
CSP: Huh? And Components
CSP: Huh? And Components
Daniel Fagnan
 
CSP: Huh? And Components
CSP: Huh? And Components
Daniel Fagnan
 
'Full Stack Kotlin' Workshop at KotlinConf
'Full Stack Kotlin' Workshop at KotlinConf
Garth Gilmour
 
Ad

More from Roman Elizarov (20)

Kotlin Coroutines in Practice @ KotlinConf 2018
Kotlin Coroutines in Practice @ KotlinConf 2018
Roman Elizarov
 
Fresh Async with Kotlin @ QConSF 2017
Fresh Async with Kotlin @ QConSF 2017
Roman Elizarov
 
Scale Up with Lock-Free Algorithms @ JavaOne
Scale Up with Lock-Free Algorithms @ JavaOne
Roman Elizarov
 
Kotlin Coroutines Reloaded
Kotlin Coroutines Reloaded
Roman Elizarov
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin Coroutines
Roman Elizarov
 
Non blocking programming and waiting
Non blocking programming and waiting
Roman Elizarov
 
ACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems Review
Roman Elizarov
 
Многопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и Практика
Roman Elizarov
 
Wait for your fortune without Blocking!
Wait for your fortune without Blocking!
Roman Elizarov
 
ACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems Review
Roman Elizarov
 
ACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems Review
Roman Elizarov
 
Why GC is eating all my CPU?
Why GC is eating all my CPU?
Roman Elizarov
 
Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)
Roman Elizarov
 
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Roman Elizarov
 
DIY Java Profiling
DIY Java Profiling
Roman Elizarov
 
ACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems Review
Roman Elizarov
 
Java Serialization Facts and Fallacies
Java Serialization Facts and Fallacies
Roman Elizarov
 
Millions quotes per second in pure java
Millions quotes per second in pure java
Roman Elizarov
 
ACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems Review
Roman Elizarov
 
The theory of concurrent programming for a seasoned programmer
The theory of concurrent programming for a seasoned programmer
Roman Elizarov
 
Kotlin Coroutines in Practice @ KotlinConf 2018
Kotlin Coroutines in Practice @ KotlinConf 2018
Roman Elizarov
 
Fresh Async with Kotlin @ QConSF 2017
Fresh Async with Kotlin @ QConSF 2017
Roman Elizarov
 
Scale Up with Lock-Free Algorithms @ JavaOne
Scale Up with Lock-Free Algorithms @ JavaOne
Roman Elizarov
 
Kotlin Coroutines Reloaded
Kotlin Coroutines Reloaded
Roman Elizarov
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin Coroutines
Roman Elizarov
 
Non blocking programming and waiting
Non blocking programming and waiting
Roman Elizarov
 
ACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems Review
Roman Elizarov
 
Многопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и Практика
Roman Elizarov
 
Wait for your fortune without Blocking!
Wait for your fortune without Blocking!
Roman Elizarov
 
ACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems Review
Roman Elizarov
 
ACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems Review
Roman Elizarov
 
Why GC is eating all my CPU?
Why GC is eating all my CPU?
Roman Elizarov
 
Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)
Roman Elizarov
 
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Roman Elizarov
 
ACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems Review
Roman Elizarov
 
Java Serialization Facts and Fallacies
Java Serialization Facts and Fallacies
Roman Elizarov
 
Millions quotes per second in pure java
Millions quotes per second in pure java
Roman Elizarov
 
ACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems Review
Roman Elizarov
 
The theory of concurrent programming for a seasoned programmer
The theory of concurrent programming for a seasoned programmer
Roman Elizarov
 
Ad

Recently uploaded (20)

“Key Requirements to Successfully Implement Generative AI in Edge Devices—Opt...
“Key Requirements to Successfully Implement Generative AI in Edge Devices—Opt...
Edge AI and Vision Alliance
 
AI vs Human Writing: Can You Tell the Difference?
AI vs Human Writing: Can You Tell the Difference?
Shashi Sathyanarayana, Ph.D
 
Powering Multi-Page Web Applications Using Flow Apps and FME Data Streaming
Powering Multi-Page Web Applications Using Flow Apps and FME Data Streaming
Safe Software
 
OWASP Barcelona 2025 Threat Model Library
OWASP Barcelona 2025 Threat Model Library
PetraVukmirovic
 
Security Tips for Enterprise Azure Solutions
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
From Manual to Auto Searching- FME in the Driver's Seat
From Manual to Auto Searching- FME in the Driver's Seat
Safe Software
 
Securing Account Lifecycles in the Age of Deepfakes.pptx
Securing Account Lifecycles in the Age of Deepfakes.pptx
FIDO Alliance
 
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Alliance
 
MuleSoft for AgentForce : Topic Center and API Catalog
MuleSoft for AgentForce : Topic Center and API Catalog
shyamraj55
 
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
Priyanka Aash
 
Cyber Defense Matrix Workshop - RSA Conference
Cyber Defense Matrix Workshop - RSA Conference
Priyanka Aash
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
The Future of Technology: 2025-2125 by Saikat Basu.pdf
The Future of Technology: 2025-2125 by Saikat Basu.pdf
Saikat Basu
 
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Josef Weingand
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
The Future of Data, AI, and AR: Innovation Inspired by You.pdf
The Future of Data, AI, and AR: Innovation Inspired by You.pdf
Safe Software
 
cnc-processing-centers-centateq-p-110-en.pdf
cnc-processing-centers-centateq-p-110-en.pdf
AmirStern2
 
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Alliance
 
“Key Requirements to Successfully Implement Generative AI in Edge Devices—Opt...
“Key Requirements to Successfully Implement Generative AI in Edge Devices—Opt...
Edge AI and Vision Alliance
 
AI vs Human Writing: Can You Tell the Difference?
AI vs Human Writing: Can You Tell the Difference?
Shashi Sathyanarayana, Ph.D
 
Powering Multi-Page Web Applications Using Flow Apps and FME Data Streaming
Powering Multi-Page Web Applications Using Flow Apps and FME Data Streaming
Safe Software
 
OWASP Barcelona 2025 Threat Model Library
OWASP Barcelona 2025 Threat Model Library
PetraVukmirovic
 
Security Tips for Enterprise Azure Solutions
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
From Manual to Auto Searching- FME in the Driver's Seat
From Manual to Auto Searching- FME in the Driver's Seat
Safe Software
 
Securing Account Lifecycles in the Age of Deepfakes.pptx
Securing Account Lifecycles in the Age of Deepfakes.pptx
FIDO Alliance
 
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Alliance
 
MuleSoft for AgentForce : Topic Center and API Catalog
MuleSoft for AgentForce : Topic Center and API Catalog
shyamraj55
 
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
Priyanka Aash
 
Cyber Defense Matrix Workshop - RSA Conference
Cyber Defense Matrix Workshop - RSA Conference
Priyanka Aash
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
The Future of Technology: 2025-2125 by Saikat Basu.pdf
The Future of Technology: 2025-2125 by Saikat Basu.pdf
Saikat Basu
 
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Josef Weingand
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
The Future of Data, AI, and AR: Innovation Inspired by You.pdf
The Future of Data, AI, and AR: Innovation Inspired by You.pdf
Safe Software
 
cnc-processing-centers-centateq-p-110-en.pdf
cnc-processing-centers-centateq-p-110-en.pdf
AmirStern2
 
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Alliance
 

Introduction to Kotlin coroutines

Editor's Notes

  • #10: Good: It is now asynchronous, Bad: Callback hell, exception handling mess
  • #12: Good: exception are propagated automatically, no more out-of-control indentation; Bad: rembering all those operators to use
  • #19: It is implemented in the similar way in all the other languages that support coroutines