SlideShare a Scribd company logo
1 of 141
Download to read offline
ASYNC, AWAIT, OH… WAIT!
YOU’D BETTER WATCH YOUR STEP
December 2016 – Alt.Net Paris
@tpierrain (use case driven)
“USE CASE DRIVEN”, BUT ALSO…
• Reactive Programmer (> 10 years)
• eXtreme Programmer (> 10 years)
• Programmer (> 18 years)
@tpierrain
NFluent Value (DDD)
LET’S START WITH A QUESTION…
LET’S START WITH A QUESTION…
Q:What happens line 24, when await occurs?
OUPS! LET’S ADD SOME CONTEXT
LET’S START WITH A QUESTION…
Q:What happens line 24, when await occurs?
LET’S START WITH A QUESTION…
Q:What happens line 24, when await occurs?
LET’S START WITH A QUESTION…
1
LET’S START WITH A QUESTION…
1
LET’S START WITH A QUESTION…
1
LET’S START WITH A QUESTION…
1
LET’S START WITH A QUESTION…
1
LET’S START WITH A QUESTION…
1
LET’S START WITH A QUESTION…
1
LET’S START WITH A QUESTION…
21
LET’S START WITH A QUESTION…
21
LET’S START WITH A QUESTION…
2
1
LET’S START WITH A QUESTION…
1
2
LET’S START WITH A QUESTION…
1
2
LET’S START WITH A QUESTION…
1
2
LET’S START WITH A QUESTION…
1
LET’S START WITH A QUESTION…
1
2
LET’S START WITH A QUESTION…
2
1
LET’S START WITH A QUESTION…
2
1
LET’S START WITH A QUESTION…
2
1
LET’S START WITH A QUESTION…
2
1
LET’S START WITH A QUESTION…
2 1
LET’S START WITH A QUESTION…
2 11
LET’S START WITH A QUESTION…
1
LET’S START WITH A QUESTION…
1
WAS ITYOUR FIRST ANSWER?
Replay?
GUESS WHAT…
SAME CODE IN ASP.NET OR UI CONTEXT
WILL DEADLOCK!
OH… WAIT! AGENDA
1. Why
2. What
3. How
4. Pitfalls & Recommendations
CHAPTER 1: WHY
LIKE ME, YOU DON’T LIKE WASTE?
A SIMPLE RULE TO AVOID WASTE OF CPU
ASYNC-AWAIT INTENTION IS...
…TO EASILYTRANSFORM
SYNCHRONOUS CODE  ASYNCHRONOUS CODE
(WITHOUT HURTINGYOUR EXISTING CODE STRUCTURE)
WITHOUT HURTINGYOUR EXISTING CODE
STRUCTURE
WAIT A MINUTE… ASYNCHRONOUS,
CONCURRENT, PARALLEL?
SYNCHRONOUS
• PERFORM something here
and now.
• The caller thread will be
blocked until it’s done
ASYNCHRONOUS
• INITIATE something here and
now (off-loading).
• The caller thread is released
immediately
• Free for something else
• No waste of CPU resource ;-)
SYNCHRONOUS
• PERFORM
THIS IS ABOUT INVOCATION!
(NOT ABOUT HOWTHE GODDAMNTHING IS EXECUTED)
ASYNCHRONOUS
• INITIATE
WHAT ABOUT EXECUTION
CONCURRENCY
• Multiple “threads” of execution
• Independent logical segments
CONCURRENCY PARALLELISM
CONCURRENCY
+
SIMULTANEOUS EXECUTION
• Multiple “threads” of execution
• Independent logical segments
CONCURRENCY
THIS IS ABOUT EXECUTION!
(OFTHE GODDAMNTHING ;-)
PARALLELISM
CONCURRENCY
+
SIMULTANEOUS EXECUTION
• Multiple “threads” of execution
• Independent logical segments
CHAPTER 2: WHAT
ASYNC-AWAIT IS NOT ABOUT GOING ASYNC
ASYNC-AWAIT IS ABOUT COMPOSINGTHE ASYNC
COMPOSINGTHE ASYNC
WITH TASK CONTINUATIONS
CHAPTER 3: HOW
(PREREQUISITE - TPL)
TASK PARALLEL LIBRARY REMINDER (TPL)
• 3 ways to instantiate and run aTASK:
• var task =Task.Run(lambda);
• var task = newTask(lambda).Start();
• Task.Factory.StartNew(lambda);
TASK PARALLEL LIBRARY REMINDER (TPL)
• 3 ways to instantiate and run aTASK:
• var task =Task.Run(lambda);
• var task = newTask(lambda).Start();
• Task.Factory.StartNew(lambda);
TASK PARALLEL LIBRARY REMINDER (TPL)
• 3 ways to instantiate and run aTASK:
• var task =Task.Run(lambda);
• var task = newTask(lambda).Start();
• Task.Factory.StartNew(lambda);
• task.Wait(), task.Result & task.Exception ( all blocking ;-(
TASK PARALLEL LIBRARY REMINDER (TPL)
• CONTINUATION
• ATask that will be achieve once a previousTask has finished
• var continuationTask = previousTask.ContinueWith(lambda);
PreviousTask
ContinuationTask
ASYNC-AWAIT
ASYNC-AWAIT
ASYNC
GENERATES STATE MACHINE
AWAIT
MARKS A CONTINUATION
ASYNC
ASYNC GENERATES STATE MACHINE
AT COMPILETIME
ASYNC GENERATES STATE MACHINE
AT COMPILETIME
ASYNC
GENERATES STATE MACHINE
AT COMPILETIME
ASYNC
GENERATES STATE MACHINE
AWAIT
AWAIT
MARKS A CONTINUATION
AWAIT
RETURNSTOTHE CALLER WITH A CONTINUATIONTASK
WHO’S DOING THE CONTINUATION?
WELL… IT DEPENDS ;-)
IT DEPENDS ON THE AWAITER CONTEXT
The following code:
IT DEPENDS ON THE AWAITER CONTEXT
The following code:
Is equivalent to:
WinForms,
WPF,
ASP.NET…
ASYNC-AWAIT
GENERATES STATE MACHINE
MARKS A CONTINUATION
THREAD(S) OR NOTHREAD?
WINDOWS I/O: UNDER THE HOOD
WINDOWS I/O: UNDER THE HOOD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
UI thread
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
BCL.WriteAsync()
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
P/Invoke
handle
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Create
I/O Request
Packet (IRP)
(asynchronous)
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
ReturnTask
(await)
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Release UI
thread
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
NOTHREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Interrupt!
NOTHREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Interrupt
Service
Routine (ISR)
NOTHREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Queue
Deferred
Procedure Call
(DPC).
NOTHREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Mark IRP
as completed
NOTHREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Create
Asynchronous
Procedure Call
(APC)
to notify the UI
process (handle)
NOTHREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Execute
APC via I/O
Completion port
(IOCP) thread
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Execute
APC via I/O
Completion port
(IOCP) thread
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Post the
continuation for
UI thread
execution
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Execute
continuation
(UI thread)
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Execute
continuation
(UI thread)
THREAD
WINDOWS I/O: UNDER THE HOOD
User mode
Kernel mode
Replay?
CHAPTER 4: PITFALLS & RECOS
#1: DEADLOCK
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
1
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
INITIAL QUESTION, BUT IN A GUI CONTEXT
21
INITIAL QUESTION, BUT IN A GUI CONTEXT
21
INITIAL QUESTION, BUT IN A GUI CONTEXT
2
1
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
2
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
2
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
2
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
2
INITIAL QUESTION, BUT IN A GUI CONTEXT
1
x
INITIAL QUESTION, BUT IN A GUI CONTEXT
The GUI case
1
x
INITIAL QUESTION, BUT IN A GUI CONTEXT
DEADLOCKS
THE DUPDOB PRINCIPLE
“QUI DIT LOCKS…
DIT DEADLOCKS”
“WHOEVER LOCKS…
EVENTUALLY DEADLOCKS”
@cyrdup
DEADLOCK MEME
DEADLOCK MEME
DEADLOCK MEME
DO NOT BLOCKTO AVOID DEADLOCK
DO NOT BLOCK TO AVOID DEADLOCK
« AWAIT » DON’T BLOCKTHE UITHREAD
YOU CODE A LIBRARY?
SYNCHRONIZATION CONTEXT IS NOTYOUR DECISION!
AVOID DEADLOCKS IMPROVE PERFORMANCE
USE CONFIGUREAWAIT(FALSE) EVERYWHERE!
YOU CODE A LIBRARY?
USE CONFIGUREAWAIT(FALSE) EVERYWHERE!
#2: ENTER THE ASYNC VOID
THE ASYNC VOID CASE
• Async void is a “fire-and-forget” mechanism...
• The caller is unable to know when an async void has finished
• The caller is unable to catch exceptions thrown from an async void
• (instead they get posted to the UI message-loop)
THE ASYNC VOID CASE
• Async void is a “fire-and-forget” mechanism...
• The caller is unable to know when an async void has finished
• The caller is unable to catch exceptions thrown from an async void
• (instead they get posted to the UI message-loop)
TRY-CATCH YOUR EVENT HANDLERS!
MS GUIDELINES
• Use async void methods only for top-level event handlers (and their like)
• Use asyncTask-returning methods everywhere else
• Try-Catch your Async event handlers!
MS EVEN SAID:
#3: USE IT WISELY
ONLY FOR I/O!
WRAP-UP
WRAP-UP
1. Never block! Unless you want to deadlock
• Locks, Wait without timeout,Task.Result…
• Use top-level await when coding UI or Web
• Use ConfigureAwait(false) everywhere within your libraries
2. Never create « async void » methods
• And try catch all such existing event handlers
3. Only for I/Os
DON’T USE ASYNC-AWAIT
UNLESSYOU UNDERSTAND HOW ITWORKS
THANKS!
APPENDIX
DON’T SYSTEMATIZE ASYNC-AWAIT?
NOTHING INTHE CONTINUATION?
NO NEED FOR AWAIT! (UNLESS FOR ‘USING’)
StateMachine
StateMachine
StateMachine
StateMachine
StateMachine
ASYNC METHOD GC IMPACT
• 3 allocations for every Async method
• Heap-allocated state machine
• With a field for every local variable in your method
• Completion delegate
• Task
TROUBLESHOOTING?
Namespace
public type nested type static method
FEW REFS
• Bart De Smet deep dive: https://channel9.msdn.com/Events/TechDays/Techdays-2014-the-
Netherlands/Async-programming-deep-dive
• Filip Ekberg at Oredev 2016: https://vimeo.com/191077931
• Async-Await Best practices: https://msdn.microsoft.com/en-us/magazine/jj991977.aspx
• Compiler error: http://stackoverflow.com/questions/12115168/why-does-this-async-await-
code-generate-not-all-code-paths-return-a-value
• Task.Run etiquette: http://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-
dont-use.html
• There is no thread: http://blog.stephencleary.com/2013/11/there-is-no-thread.html
• Does usingTasks (TPL) library make an application multithreaded? :
http://stackoverflow.com/questions/23833255/does-using-tasks-tpl-library-make-an-
application-multithreaded
• Eliding Async-Await : http://blog.stephencleary.com/2016/12/eliding-async-await.html
Async await...oh wait!

More Related Content

What's hot

What's hot (20)

Low latency Java apps
Low latency Java appsLow latency Java apps
Low latency Java apps
 
Intrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VMIntrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VM
 
Introducing Async/Await
Introducing Async/AwaitIntroducing Async/Await
Introducing Async/Await
 
Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at Netflix
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우
 
H4x0rs gonna hack
H4x0rs gonna hackH4x0rs gonna hack
H4x0rs gonna hack
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best Practices
 
PSR-3 logs using Monolog and Graylog
PSR-3 logs using Monolog and Graylog PSR-3 logs using Monolog and Graylog
PSR-3 logs using Monolog and Graylog
 
Using ARI and AGI to Connect Asterisk Instances
Using ARI and AGI to Connect Asterisk Instances Using ARI and AGI to Connect Asterisk Instances
Using ARI and AGI to Connect Asterisk Instances
 
Log4j in 8 slides
Log4j in 8 slidesLog4j in 8 slides
Log4j in 8 slides
 
WebAssembly Fundamentals
WebAssembly FundamentalsWebAssembly Fundamentals
WebAssembly Fundamentals
 
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
 
Practical Application of the API Security Top Ten: A Tester's Perspective
Practical Application of the API Security Top Ten: A Tester's PerspectivePractical Application of the API Security Top Ten: A Tester's Perspective
Practical Application of the API Security Top Ten: A Tester's Perspective
 
Java Performance Analysis on Linux with Flame Graphs
Java Performance Analysis on Linux with Flame GraphsJava Performance Analysis on Linux with Flame Graphs
Java Performance Analysis on Linux with Flame Graphs
 
SIPREC RTPEngine Media Forking
SIPREC RTPEngine Media ForkingSIPREC RTPEngine Media Forking
SIPREC RTPEngine Media Forking
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
 
Attacker's Perspective of Active Directory
Attacker's Perspective of Active DirectoryAttacker's Perspective of Active Directory
Attacker's Perspective of Active Directory
 
Python (Jinja2) Templates for Network Automation
Python (Jinja2) Templates for Network AutomationPython (Jinja2) Templates for Network Automation
Python (Jinja2) Templates for Network Automation
 
Introduction into ES6 JavaScript.
Introduction into ES6 JavaScript.Introduction into ES6 JavaScript.
Introduction into ES6 JavaScript.
 

Viewers also liked

Viewers also liked (20)

Faible latence, haut debit PerfUG (Septembre 2014)
Faible latence, haut debit PerfUG (Septembre 2014)Faible latence, haut debit PerfUG (Septembre 2014)
Faible latence, haut debit PerfUG (Septembre 2014)
 
Decouvrir son sujet grace à l'event storming
Decouvrir son sujet grace à l'event stormingDecouvrir son sujet grace à l'event storming
Decouvrir son sujet grace à l'event storming
 
Docker and Windows: The State of the Union
Docker and Windows: The State of the UnionDocker and Windows: The State of the Union
Docker and Windows: The State of the Union
 
Sortir de notre zone de confort
Sortir de notre zone de confortSortir de notre zone de confort
Sortir de notre zone de confort
 
Decouvrir CQRS (sans Event sourcing) par la pratique
Decouvrir CQRS (sans Event sourcing) par la pratiqueDecouvrir CQRS (sans Event sourcing) par la pratique
Decouvrir CQRS (sans Event sourcing) par la pratique
 
.Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20...
.Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20....Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20...
.Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20...
 
Windows Containers and Docker: Why You Should Care
Windows Containers and Docker: Why You Should CareWindows Containers and Docker: Why You Should Care
Windows Containers and Docker: Why You Should Care
 
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with SagasQCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
 
.NET Inside - Microservices, .NET Core e Serverless
.NET Inside - Microservices, .NET Core e Serverless.NET Inside - Microservices, .NET Core e Serverless
.NET Inside - Microservices, .NET Core e Serverless
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for Microservices
 
TDD is dead?!? Let's do an autospy (ncrafts.io)
TDD is dead?!? Let's do an autospy (ncrafts.io)TDD is dead?!? Let's do an autospy (ncrafts.io)
TDD is dead?!? Let's do an autospy (ncrafts.io)
 
Faible latence haut debit Devoxx FR 2014
Faible latence haut debit Devoxx FR 2014Faible latence haut debit Devoxx FR 2014
Faible latence haut debit Devoxx FR 2014
 
Ddd reboot (english version)
Ddd reboot (english version)Ddd reboot (english version)
Ddd reboot (english version)
 
Culture craft humantalks
Culture craft humantalksCulture craft humantalks
Culture craft humantalks
 
The Velvet Revolution: Modernizing Traditional ASP.NET Apps with Docker
The Velvet Revolution: Modernizing Traditional ASP.NET Apps with DockerThe Velvet Revolution: Modernizing Traditional ASP.NET Apps with Docker
The Velvet Revolution: Modernizing Traditional ASP.NET Apps with Docker
 
Coder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architectureCoder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architecture
 
CQRS without event sourcing
CQRS without event sourcingCQRS without event sourcing
CQRS without event sourcing
 
Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...Solving distributed data management problems in a microservice architecture (...
Solving distributed data management problems in a microservice architecture (...
 
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Building and deploying microservices with event sourcing, CQRS and Docker (Be...Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
 
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
 

Similar to Async await...oh wait!

End to-end async and await
End to-end async and awaitEnd to-end async and await
End to-end async and await
vfabro
 
Async CTP 3 Presentation for MUGH 2012
Async CTP 3 Presentation for MUGH 2012Async CTP 3 Presentation for MUGH 2012
Async CTP 3 Presentation for MUGH 2012
Sri Kanth
 

Similar to Async await...oh wait! (20)

Task parallel library presentation
Task parallel library presentationTask parallel library presentation
Task parallel library presentation
 
.NET Fest 2018. Владимир Крамар. Многопоточное и асинхронное программирование...
.NET Fest 2018. Владимир Крамар. Многопоточное и асинхронное программирование....NET Fest 2018. Владимир Крамар. Многопоточное и асинхронное программирование...
.NET Fest 2018. Владимир Крамар. Многопоточное и асинхронное программирование...
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
Is persistency on serverless even possible?!
Is persistency on serverless even possible?!Is persistency on serverless even possible?!
Is persistency on serverless even possible?!
 
Need for Async: Hot pursuit for scalable applications
Need for Async: Hot pursuit for scalable applicationsNeed for Async: Hot pursuit for scalable applications
Need for Async: Hot pursuit for scalable applications
 
Exception+Logging=Diagnostics 2011
Exception+Logging=Diagnostics 2011Exception+Logging=Diagnostics 2011
Exception+Logging=Diagnostics 2011
 
High performance network programming on the jvm oscon 2012
High performance network programming on the jvm   oscon 2012 High performance network programming on the jvm   oscon 2012
High performance network programming on the jvm oscon 2012
 
End to-end async and await
End to-end async and awaitEnd to-end async and await
End to-end async and await
 
Sangam 18 - Database Development: Return of the SQL Jedi
Sangam 18 - Database Development: Return of the SQL JediSangam 18 - Database Development: Return of the SQL Jedi
Sangam 18 - Database Development: Return of the SQL Jedi
 
Training – Going Async
Training – Going AsyncTraining – Going Async
Training – Going Async
 
Car hacking 101 rev2
Car hacking 101 rev2Car hacking 101 rev2
Car hacking 101 rev2
 
JS Event Loop
JS Event LoopJS Event Loop
JS Event Loop
 
SPARKNaCl: A verified, fast cryptographic library
SPARKNaCl: A verified, fast cryptographic librarySPARKNaCl: A verified, fast cryptographic library
SPARKNaCl: A verified, fast cryptographic library
 
Asynchronous Programming.pptx
Asynchronous Programming.pptxAsynchronous Programming.pptx
Asynchronous Programming.pptx
 
Begin with c++ Fekra Course #1
Begin with c++ Fekra Course #1Begin with c++ Fekra Course #1
Begin with c++ Fekra Course #1
 
Cassandra Day SV 2014: Spark, Shark, and Apache Cassandra
Cassandra Day SV 2014: Spark, Shark, and Apache CassandraCassandra Day SV 2014: Spark, Shark, and Apache Cassandra
Cassandra Day SV 2014: Spark, Shark, and Apache Cassandra
 
Async CTP 3 Presentation for MUGH 2012
Async CTP 3 Presentation for MUGH 2012Async CTP 3 Presentation for MUGH 2012
Async CTP 3 Presentation for MUGH 2012
 
The Need for Async @ ScalaWorld
The Need for Async @ ScalaWorldThe Need for Async @ ScalaWorld
The Need for Async @ ScalaWorld
 
C# Async/Await Explained
C# Async/Await ExplainedC# Async/Await Explained
C# Async/Await Explained
 
21st Century CPAN Testing: CPANci
21st Century CPAN Testing: CPANci21st Century CPAN Testing: CPANci
21st Century CPAN Testing: CPANci
 

More from Thomas Pierrain

More from Thomas Pierrain (17)

The scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarineThe scale-up, the autonomy and the nuclear submarine
The scale-up, the autonomy and the nuclear submarine
 
Hexagonal And Beyond
Hexagonal And BeyondHexagonal And Beyond
Hexagonal And Beyond
 
La scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaireLa scale-up, l'autonomie et le sous-marin nucléaire
La scale-up, l'autonomie et le sous-marin nucléaire
 
De l'autre côté du miroir
De l'autre côté du miroirDe l'autre côté du miroir
De l'autre côté du miroir
 
eXtreme
eXtremeeXtreme
eXtreme
 
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDDWrite Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
Write Antifragile & Domain-Driven tests with ”Outside-in diamond” ◆ TDD
 
Beyond Hexagonal architecture
Beyond Hexagonal architectureBeyond Hexagonal architecture
Beyond Hexagonal architecture
 
The 9 rules of debugging
The 9 rules of debuggingThe 9 rules of debugging
The 9 rules of debugging
 
Hexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shellHexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shell
 
Une nuit dans l'hexagone
Une nuit dans l'hexagoneUne nuit dans l'hexagone
Une nuit dans l'hexagone
 
Equiper sa voie
Equiper sa voieEquiper sa voie
Equiper sa voie
 
As time goes by (episode 2)
As time goes by (episode 2)As time goes by (episode 2)
As time goes by (episode 2)
 
Et si on parlait Éthique ?
Et si on parlait Éthique ?Et si on parlait Éthique ?
Et si on parlait Éthique ?
 
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettreL'Agilité a grande échelle : conserver l'esprit, pas la lettre
L'Agilité a grande échelle : conserver l'esprit, pas la lettre
 
Legacy club (english version)
Legacy club (english version)Legacy club (english version)
Legacy club (english version)
 
The art of Software Design
The art of Software DesignThe art of Software Design
The art of Software Design
 
Culture Craft Devoxx 2015
Culture Craft Devoxx 2015Culture Craft Devoxx 2015
Culture Craft Devoxx 2015
 

Recently uploaded

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 

Recently uploaded (20)

Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 

Async await...oh wait!

Editor's Notes

  1. Ref: http://www.world-of-knives.ch/public/media/filer_thumbnails/2011/11/14/fk-140wh-wh_5_5_3.jpg__663x372_q80_crop-1_upscale-1.jpg
  2. Ref: http://images.martechadvisor.com/images/uploads/content_images/cbc928ab5eb5e7f00676992442650b40.jpg
  3. Ref:http://i.imgur.com/ZnREN.jpg
  4. Ref: http://blog.canacad.ac.jp/wpmu/15matser/files/2013/06/FoodWaste1.jpg
  5. Ref : http://www.careofcars.com/wp-content/uploads/2014/01/patchwork-on-cheap-cars.jpg
  6. Ref: http://ci.memecdn.com/7869512.jpg
  7. Refs : - https://cdn3.iconfinder.com/data/icons/basic-mobile-part-3/512/prisoner-512.png - https://cdn4.iconfinder.com/data/icons/human-values-solid/100/_-62-512.png - https://d30y9cdsu7xlg0.cloudfront.net/png/89995-200.png
  8. Refs : - https://cdn3.iconfinder.com/data/icons/basic-mobile-part-3/512/prisoner-512.png - https://cdn4.iconfinder.com/data/icons/human-values-solid/100/_-62-512.png - https://d30y9cdsu7xlg0.cloudfront.net/png/89995-200.png
  9. Not OS threads e.g.: JavaScript in a browser Node.js e.g.: Thread-based (e.g. multi-threading) Task-based (e.g. TPL)
  10. Not OS threads e.g.: JavaScript in a browser Node.js e.g.: Thread-based (e.g. multi-threading) Task-based (e.g. TPL)
  11. Not OS threads e.g.: JavaScript in a browser Node.js e.g.: Thread-based (e.g. multi-threading) Task-based (e.g. TPL)
  12. Refs : - https://cdn3.iconfinder.com/data/icons/basic-mobile-part-3/512/prisoner-512.png - https://d30y9cdsu7xlg0.cloudfront.net/png/89995-200.png
  13. Ref: https://static1.squarespace.com/static/544d2af6e4b007f43083a5b0/544e719be4b07c493b25c4e4/54625440e4b0f79db69b3b1a/1417724183061/?format=1500w
  14. Ref: http://www.designnation.de/Media/Galerie/50cf9c1d197e0,Houston-we-have-a-problem.jpg
  15. Ref: https://avatars1.githubusercontent.com/u/3131866?v=3&s=460
  16. Ref: http://ci.memecdn.com/7869512.jpg
  17. Ref: http://ci.memecdn.com/7869512.jpg
  18. Ref: http://ci.memecdn.com/7869512.jpg