SlideShare a Scribd company logo
C# 5.0 Async
 Pratik Khasnabis
DDD Melbourne 2012
About Me

Quick background
Lead Developer at Bupa Australia
Developer for 15 years
C# & .Net 8 years
C++ before that




Disclaimer
This presentation is my own and I do not
represent my company.
The need for Async

Responsive UI
UI thread is running as a message pump in a   Touch ready Metro Apps
loop                                          In WinRT if an API is likely to take
Waiting on IO or long computation will stop   more than 50ms to run the API is
message processing => Frozen UI               asynchronous




Scalable Server Applications
A CLR thread is used to service requests
A blocked thread => less scalable
Service thousands of IO bound requests on a
small pool of threads
Async in .Net 4.5

First introduced in PDC
                                   Two new keywords
2010 and the refresh in
                                   async and await
MIX 2011 (VS 2010 SP1)



An unsupported out-of-             Built to take advantage of
band release. Updated C#                Task and Task<T>
and VB compilers.                   Introduced in .Net 4.0




AsyncCtpLibrary.dll
                                       Async methods
introduced async
                                     Pervasive in .Net 4.5
extension methods for
common classes.
.NET 4 and Silverlight 5
Async Targeting Pack
Download using NuGet
Microsoft.CompilerServices.AsyncTargetingPack




Differences in Behaviour
Read the release notes
Static helper methods are in TaskEx
class instead of Task
e.g. Task.Run(
) vs TaskEx.Run(
)               Windows Phone and Azure
                                                No support yet
Task

Task                                Awaiters
A Task is promise of a              Tasks are the backing
result that will delivered          types for async methods
at some time in future              in .Net 4.5




Compositional                       Two types
Tasks can be composed               Task
using continuations                 Task<T>



                                    Awaiters
Cancellable                         Tasks are the backing
Tasks can be designed to            types for async methods
be cancelled easily                 in .Net 4.5
Async and Await

Keyword: async                           Keyword: await
Only methods or lamdbas with async       Makes the rest of method a
modifier can use the await keyword.      continuation
Return type must be void, Task or        When the method completes
Task<T>                                  execution resumes where it left off on
The method actually returns void or T,   the right synchronisation context
the compile creates the Task object      Compiler generates a state machine
Doesn’t make the method
asynchronous


                                         var awaiter = expression.GetAwaiter();
                                         if (awaiter.IsCompleted)
                                           Console.WriteLine (awaiter.GetResult());
                                         else
var result = await expression;
                                           awaiter.OnCompleted (() =>
<code block>                               {
                                             var result = awaiter.GetResult();
                                             <code block>
                                           );
Task-Based Async Pattern

TAP methods has an async modifier ,
                                      TAP methods should return quickly to
returns a running Task or
                                      caller with a small synchronous
Task<TResult> and ends with an
                                      phase.
“Async” suffix by convention



 TAP methods should have the same
 parameters as the synchronous one    Avoids out and ref parameters
 in the same order




Can have CancellationToken
                                      Can have IProgress<T> parameter
parameter
Async in .Net 4.5 BCL

System.Xml.XmlReader
                                       System.Net.Mail
public virtual Task<bool>
                                       public Task SendMailAsync(
ReadAsync()
                                       MailMessage message )


                                      System.Net.Http.HttpClient
System.IO.Stream                      public Task<string>
public Task CopyToAsync(              GetStringAsync( string
Stream destination )                  requestUri )


                            System.Net.WebSockets
                            public abstract
System.IO.TextReader        Task<WebSocketReceiveResult>
public virtual Task<int>    ReceiveAsync( ArraySegment<byte>
ReadAsync( char[] buffer,   buffer, CancellationToken
int index, int count )      cancellationToken )
Async in WPF/WinForms apps
 Caller         Void Async Method                           Task Async Method                     Awaitable
UI
                                                                                                       IOCP
thread
                                                                                                       thread
          async void
          LoadPhotosAsync(string tag)
          {                                         async Task<FlickrPhoto[]>
           
                                        GetPhotosAsync(string tag, int page)
          var photosTask = GetPhotosAsync(tag, pa   {
          ge);
                                                    WebClient client = new WebClient();

                                                    var webTask = client.DownloadStringTaskAsyn   webTask
                                                    c(
);
                                                    var apiResponse = await webTask;

          var photos = await photosTask;

                                                    var photos = ParseResponse(apiResponse);
                                                    return photos;
          DisplayPhotos(photos);



                                                    }

          }
Concurrency without threads

             UI Thread



Download                         Process
                Message Pump
  Data                            Data



             Process UI Events
Async in Server Apps
                                Thread Pool Exhaustion



                                                                   DB
                                              ASP.Net
             IIS      IIS I/O Thread
           Worker
           Process
                                                                   WS


                      MaxConcurrentRequestsPerCPU


                                             Worker Threads        File
                                             Waiting for I/O ops
                     HTTP.SYS
                     Kernel
                                             To complete
                     Queue
HTTP
Requests
ASP.Net Core Services

Asynchronous HTTP modules                                 Asynchronous HTTP handlers
public class MyHttpModule : IHttpModule
{                                                         public class MyAsyncHandler :
private async Task
ScrapeHtmlPage(object caller, EventArgs e)                HttpTaskAsyncHandler
{                                                         {
 await ...
}                                                           public override async Task
  public void Init(HttpApplication                        ProcessRequestAsync(HttpContext
context)
 {                                                        context)
   EventHandlerTaskAsyncHelper helper =                     {
   new EventHandlerTaskAsyncHelper(ScrapeHtmlPage);
   context.AddOnPostAuthorizeRequestAsync(                    await 

     helper.BeginEventHandler, helper.EndEventHandler);     }
 }
}                                                         }
ASP.Net MVC 4
                                  Timeout
Controller                        [AsyncTimeout(2000)]
Derive from AsyncController ??    [HandleError(ExceptionType =
                                  typeof(TaskCanceledException), View
                                  = "TimedOut")]



Actions
async methods returning Task or
Task<ActionResult>
ASP.Net WebForms
        Page Markup
        <%@ Page Language="C#"
        Async="true" AsyncTimeOut="2"
        CodeBehind="AsyncPage.aspx.cs" %>


        Page_Load method
        Register the async method
        The async mehtod will be
        asynchronoiusly executed after
        PreRender stage in page lifecycle
WCF
Service: Async operations                            Client: Async proxies
[ServiceContract]                                    Use svcutil or Add Service Reference
public interface IDemoService
{
  [OperationContract]                                var proxy = new
  Task<string> GetStockQuoteAsync(string ticker);    StockQuoteService.StockQuoteSoapClie
}
                                                     nt();
public class DemoService : IDemoService              var quote = await
{                                                    proxy.GetQuoteAsync("MSFT");
  public async Task<string> GetStockQuoteAsync
(string ticker)
  {
    await ...
  }
}
VS 2012 Unit Tests
Async Test Methods – return Task     Test Frameworks
[TestMethod]                         MS Test – Supports async, Built in test
public async Task UnitTestMethod()   provider
{                                    xUnit – Supports async in v1.9,
  await Task.Delay(1000);            downloadable test provider
  Assert.AreEqual(1,1);              NUnit – Doesn’t support async,
}                                    downloadable test provider


Execution Time
1 sec
Metro and WinRT
http://blogs.msdn.com/b/windowsappdev/archive/2012/06/14/exposing-net-tasks-
as-winrt-asynchronous-operations.aspx
http://blogs.msdn.com/b/windowsappdev/archive/2012/03/20/keeping-apps-fast-
and-fluid-with-asynchrony-in-the-windows-runtime.aspx
http://blogs.msdn.com/b/windowsappdev/archive/2012/04/24/diving-deep-with-
winrt-and-await.aspx
                                 Watch the other
                                 sessions on Metro
IAsyncInfo                       App Development
All async methods in WinRT
implements this interface and 4 other                               Compiler Magic
IAsyncAction                                    IAsyncInfo has the awaitable pattern
IAsyncOperation<TResult>                         The C# and VB compiler will convert
IAsyncActionWithProgress<TProgress>            WinRT async methods to return Tasks
IAsyncOperationWithProgress<TResult,
TProgress>
Choosing Sync vs Async

            Synchronous
Operations are simple or short-running
        CPU bound operations
    Simplicity is more important




                                                        Asynchronous
                                         I/O bound operations (DB, network, disk)
                                               Provide cancellation support
                                               Parallelism is more important
ADO.Net
                                     Tabular Data Stream Protocol
Worker
Thread
                                           reader.NextResult()

               i/o                                         “DONE”                      “DONE”
                                          Result Set        Token     Result Set        Token


                               reader.Next()

         i/o         “ROW”                             “ROW”                       “ROW”
                      Token          Row                Token       Row             Token



                              Reader.IsDBNull()
         i/o
                     Column          Column            Column       Column         Column
                     Header           Data             Header        Data          Header

                                pa   ck     et    s


                       Large Column e.g. varbinary(8000)
ADO.Net
                               Recommendations


Use
                                        Use
CommandBehavior.SequentialAccess
                                        NextResultAsync() and ReadAsync()
Unless reading large columns


Use
Synchronous column access               Use
IsDBNull, GetFieldValue<T>              Streaming for massive columns
Unless reading large columns            GetStream()
IsDBNullAsync,                          GetTextReader()
GetFieldValueAsync<T>                   GetXmlReader()
Resources
‱ http://msdn.microsoft.com/en-US/async
‱ VB.Net - http://blogs.msdn.com/b/lucian/
‱ C# (implementation details) -
  https://msmvps.com/blogs/jon_skeet/archive
  /tags/Eduasync/default.aspx

More Related Content

PPTX
History of asynchronous in .NET
Marcin Tyborowski
 
PPTX
Asynchronous programming
Filip Ekberg
 
PPT
Asynchronous Programming in C# - Part 1
Mindfire Solutions
 
PPTX
C# Async Await
Simplilearn
 
PPTX
Asynchronous programming - .NET Way
Bishnu Rawal
 
PPTX
Asynchronous Programming in .NET
Pierre-Luc Maheu
 
PPTX
Asynchronous programming in C#
Bohdan Pashkovskyi
 
PDF
Introduction to Node JS.pdf
Bareen Shaikh
 
History of asynchronous in .NET
Marcin Tyborowski
 
Asynchronous programming
Filip Ekberg
 
Asynchronous Programming in C# - Part 1
Mindfire Solutions
 
C# Async Await
Simplilearn
 
Asynchronous programming - .NET Way
Bishnu Rawal
 
Asynchronous Programming in .NET
Pierre-Luc Maheu
 
Asynchronous programming in C#
Bohdan Pashkovskyi
 
Introduction to Node JS.pdf
Bareen Shaikh
 

What's hot (20)

PDF
Introduction to ASP.NET Core
Avanade Nederland
 
PDF
Introducing Async/Await
Valeri Karpov
 
PDF
Nodejs Explained with Examples
Gabriele Lana
 
PPTX
Node js introduction
Joseph de Castelnau
 
PPTX
Kafka 101
Clement Demonchy
 
PDF
TypeScript
Saray Chak
 
PPTX
ASP.NET Core MVC + Web API with Overview
Shahed Chowdhuri
 
PPTX
Build RESTful API Using Express JS
Cakra Danu Sedayu
 
PDF
Netty ì„žëŻžë‚˜
Jang Hoon
 
PPTX
Getting started with typescript
C...L, NESPRESSO, WAFAASSURANCE, SOFRECOM ORANGE
 
PPTX
GRPC.pptx
Afzal Juneja
 
PDF
æ·șè«‡æŽąçŽą Linux çł»ç”±èš­èšˆäč‹é“
National Cheng Kung University
 
PDF
Tcp ip & io model
Nam Hyeonuk
 
PDF
[Webinar]: Working with Reactive Spring
Knoldus Inc.
 
PDF
[였픈소슀컚섀팅]ìż ëČ„ë„€í‹°ìŠ€ë„Œ 활용한 개발환êČœ ê”Źì¶•
Ji-Woong Choi
 
PDF
NEXT.JS
Binumon Joseph
 
PPT
Servlets
Sasidhar Kothuru
 
PDF
Asp.Net Core MVC , Razor page , Entity Framework Core
mohamed elshafey
 
PPSX
Async-await best practices in 10 minutes
Paulo Morgado
 
Introduction to ASP.NET Core
Avanade Nederland
 
Introducing Async/Await
Valeri Karpov
 
Nodejs Explained with Examples
Gabriele Lana
 
Node js introduction
Joseph de Castelnau
 
Kafka 101
Clement Demonchy
 
TypeScript
Saray Chak
 
ASP.NET Core MVC + Web API with Overview
Shahed Chowdhuri
 
Build RESTful API Using Express JS
Cakra Danu Sedayu
 
Netty ì„žëŻžë‚˜
Jang Hoon
 
Getting started with typescript
C...L, NESPRESSO, WAFAASSURANCE, SOFRECOM ORANGE
 
GRPC.pptx
Afzal Juneja
 
æ·șè«‡æŽąçŽą Linux çł»ç”±èš­èšˆäč‹é“
National Cheng Kung University
 
Tcp ip & io model
Nam Hyeonuk
 
[Webinar]: Working with Reactive Spring
Knoldus Inc.
 
[였픈소슀컚섀팅]ìż ëČ„ë„€í‹°ìŠ€ë„Œ 활용한 개발환êČœ ê”Źì¶•
Ji-Woong Choi
 
NEXT.JS
Binumon Joseph
 
Servlets
Sasidhar Kothuru
 
Asp.Net Core MVC , Razor page , Entity Framework Core
mohamed elshafey
 
Async-await best practices in 10 minutes
Paulo Morgado
 
Ad

Similar to Async Programming in C# 5 (20)

PPTX
Ddd melbourne 2011 C# async ctp
Pratik Khasnabis
 
PPTX
Sync with async
prabathsl
 
PPT
Asynchronous in dot net4
Wei Sun
 
PDF
Asynchronous programming in .net 4.5 with c#
Binu Bhasuran
 
PPTX
Parallel Processing
RTigger
 
PPTX
End to-end async and await
vfabro
 
PPTX
Asynchronous programming in ASP.NET
Alex Thissen
 
PPTX
Binary Studio Academy: Concurrency in C# 5.0
Binary Studio
 
PPTX
C# 5 deep drive into asynchronous programming
Praveen Prajapati
 
PPTX
Training – Going Async
Betclic Everest Group Tech Team
 
PPTX
Task parallel library presentation
ahmed sayed
 
PPTX
Copper: A high performance workflow engine
dmoebius
 
PDF
Aspdotnet
Adil Jafri
 
PPTX
Workshop: Async and Parallel in C#
Rainer Stropek
 
PDF
Deep Dive async/await in Unity with UniTask(EN)
Yoshifumi Kawai
 
PDF
Building Continuous Application with Structured Streaming and Real-Time Data ...
Databricks
 
PDF
Introduction tomcat7 servlet3
JavaEE Trainers
 
PPT
Server side JavaScript: going all the way
Oleg Podsechin
 
PDF
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
jeffz
 
PPT
JS everywhere 2011
Oleg Podsechin
 
Ddd melbourne 2011 C# async ctp
Pratik Khasnabis
 
Sync with async
prabathsl
 
Asynchronous in dot net4
Wei Sun
 
Asynchronous programming in .net 4.5 with c#
Binu Bhasuran
 
Parallel Processing
RTigger
 
End to-end async and await
vfabro
 
Asynchronous programming in ASP.NET
Alex Thissen
 
Binary Studio Academy: Concurrency in C# 5.0
Binary Studio
 
C# 5 deep drive into asynchronous programming
Praveen Prajapati
 
Training – Going Async
Betclic Everest Group Tech Team
 
Task parallel library presentation
ahmed sayed
 
Copper: A high performance workflow engine
dmoebius
 
Aspdotnet
Adil Jafri
 
Workshop: Async and Parallel in C#
Rainer Stropek
 
Deep Dive async/await in Unity with UniTask(EN)
Yoshifumi Kawai
 
Building Continuous Application with Structured Streaming and Real-Time Data ...
Databricks
 
Introduction tomcat7 servlet3
JavaEE Trainers
 
Server side JavaScript: going all the way
Oleg Podsechin
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
jeffz
 
JS everywhere 2011
Oleg Podsechin
 
Ad

More from Pratik Khasnabis (9)

PPTX
Open API (aka Swagger) - DDD by Night May 2020
Pratik Khasnabis
 
PPTX
Whats new in .net core 3
Pratik Khasnabis
 
PPTX
Containers on Windows
Pratik Khasnabis
 
PPTX
Microsoft Azure fundamentals for AWS practitioners
Pratik Khasnabis
 
PPTX
Deploying a website in Azure using ARM templates
Pratik Khasnabis
 
PPTX
What is .Net Standard
Pratik Khasnabis
 
PPTX
Recapping C# 6.0 and A First Look Into C# 7.0
Pratik Khasnabis
 
PPTX
Deploy a Website in Azure using ARM Templates
Pratik Khasnabis
 
PPTX
DDD Melbourne 2014 security in ASP.Net Web API 2
Pratik Khasnabis
 
Open API (aka Swagger) - DDD by Night May 2020
Pratik Khasnabis
 
Whats new in .net core 3
Pratik Khasnabis
 
Containers on Windows
Pratik Khasnabis
 
Microsoft Azure fundamentals for AWS practitioners
Pratik Khasnabis
 
Deploying a website in Azure using ARM templates
Pratik Khasnabis
 
What is .Net Standard
Pratik Khasnabis
 
Recapping C# 6.0 and A First Look Into C# 7.0
Pratik Khasnabis
 
Deploy a Website in Azure using ARM Templates
Pratik Khasnabis
 
DDD Melbourne 2014 security in ASP.Net Web API 2
Pratik Khasnabis
 

Recently uploaded (20)

PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
PDF
Revolutionize Operations with Intelligent IoT Monitoring and Control
Rejig Digital
 
PDF
This slide provides an overview Technology
mineshkharadi333
 
PPTX
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
 
PDF
Best ERP System for Manufacturing in India | Elite Mindz
Elite Mindz
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PDF
Cloud-Migration-Best-Practices-A-Practical-Guide-to-AWS-Azure-and-Google-Clou...
Artjoker Software Development Company
 
PDF
Why Your AI & Cybersecurity Hiring Still Misses the Mark in 2025
Virtual Employee Pvt. Ltd.
 
PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PDF
Doc9.....................................
SofiaCollazos
 
PDF
CIFDAQ'S Market Insight: BTC to ETH money in motion
CIFDAQ
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PDF
DevOps & Developer Experience Summer BBQ
AUGNYC
 
PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
PDF
Software Development Methodologies in 2025
KodekX
 
PPTX
Comunidade Salesforce SĂŁo Paulo - Desmistificando o Omnistudio (Vlocity)
Francisco Vieira JĂșnior
 
PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
Revolutionize Operations with Intelligent IoT Monitoring and Control
Rejig Digital
 
This slide provides an overview Technology
mineshkharadi333
 
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
 
Best ERP System for Manufacturing in India | Elite Mindz
Elite Mindz
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
Cloud-Migration-Best-Practices-A-Practical-Guide-to-AWS-Azure-and-Google-Clou...
Artjoker Software Development Company
 
Why Your AI & Cybersecurity Hiring Still Misses the Mark in 2025
Virtual Employee Pvt. Ltd.
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
Doc9.....................................
SofiaCollazos
 
CIFDAQ'S Market Insight: BTC to ETH money in motion
CIFDAQ
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
DevOps & Developer Experience Summer BBQ
AUGNYC
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
Software Development Methodologies in 2025
KodekX
 
Comunidade Salesforce SĂŁo Paulo - Desmistificando o Omnistudio (Vlocity)
Francisco Vieira JĂșnior
 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 

Async Programming in C# 5

  • 1. C# 5.0 Async Pratik Khasnabis DDD Melbourne 2012
  • 2. About Me Quick background Lead Developer at Bupa Australia Developer for 15 years C# & .Net 8 years C++ before that Disclaimer This presentation is my own and I do not represent my company.
  • 3. The need for Async Responsive UI UI thread is running as a message pump in a Touch ready Metro Apps loop In WinRT if an API is likely to take Waiting on IO or long computation will stop more than 50ms to run the API is message processing => Frozen UI asynchronous Scalable Server Applications A CLR thread is used to service requests A blocked thread => less scalable Service thousands of IO bound requests on a small pool of threads
  • 4. Async in .Net 4.5 First introduced in PDC Two new keywords 2010 and the refresh in async and await MIX 2011 (VS 2010 SP1) An unsupported out-of- Built to take advantage of band release. Updated C# Task and Task<T> and VB compilers. Introduced in .Net 4.0 AsyncCtpLibrary.dll Async methods introduced async Pervasive in .Net 4.5 extension methods for common classes.
  • 5. .NET 4 and Silverlight 5 Async Targeting Pack Download using NuGet Microsoft.CompilerServices.AsyncTargetingPack Differences in Behaviour Read the release notes Static helper methods are in TaskEx class instead of Task e.g. Task.Run(
) vs TaskEx.Run(
) Windows Phone and Azure No support yet
  • 6. Task Task Awaiters A Task is promise of a Tasks are the backing result that will delivered types for async methods at some time in future in .Net 4.5 Compositional Two types Tasks can be composed Task using continuations Task<T> Awaiters Cancellable Tasks are the backing Tasks can be designed to types for async methods be cancelled easily in .Net 4.5
  • 7. Async and Await Keyword: async Keyword: await Only methods or lamdbas with async Makes the rest of method a modifier can use the await keyword. continuation Return type must be void, Task or When the method completes Task<T> execution resumes where it left off on The method actually returns void or T, the right synchronisation context the compile creates the Task object Compiler generates a state machine Doesn’t make the method asynchronous var awaiter = expression.GetAwaiter(); if (awaiter.IsCompleted) Console.WriteLine (awaiter.GetResult()); else var result = await expression; awaiter.OnCompleted (() => <code block> { var result = awaiter.GetResult(); <code block> );
  • 8. Task-Based Async Pattern TAP methods has an async modifier , TAP methods should return quickly to returns a running Task or caller with a small synchronous Task<TResult> and ends with an phase. “Async” suffix by convention TAP methods should have the same parameters as the synchronous one Avoids out and ref parameters in the same order Can have CancellationToken Can have IProgress<T> parameter parameter
  • 9. Async in .Net 4.5 BCL System.Xml.XmlReader System.Net.Mail public virtual Task<bool> public Task SendMailAsync( ReadAsync() MailMessage message ) System.Net.Http.HttpClient System.IO.Stream public Task<string> public Task CopyToAsync( GetStringAsync( string Stream destination ) requestUri ) System.Net.WebSockets public abstract System.IO.TextReader Task<WebSocketReceiveResult> public virtual Task<int> ReceiveAsync( ArraySegment<byte> ReadAsync( char[] buffer, buffer, CancellationToken int index, int count ) cancellationToken )
  • 10. Async in WPF/WinForms apps Caller Void Async Method Task Async Method Awaitable UI IOCP thread thread async void LoadPhotosAsync(string tag) { async Task<FlickrPhoto[]> 
 GetPhotosAsync(string tag, int page) var photosTask = GetPhotosAsync(tag, pa { ge); WebClient client = new WebClient(); var webTask = client.DownloadStringTaskAsyn webTask c(
); var apiResponse = await webTask; var photos = await photosTask; var photos = ParseResponse(apiResponse); return photos; DisplayPhotos(photos); } }
  • 11. Concurrency without threads UI Thread Download Process Message Pump Data Data Process UI Events
  • 12. Async in Server Apps Thread Pool Exhaustion DB ASP.Net IIS IIS I/O Thread Worker Process WS MaxConcurrentRequestsPerCPU Worker Threads File Waiting for I/O ops HTTP.SYS Kernel To complete Queue HTTP Requests
  • 13. ASP.Net Core Services Asynchronous HTTP modules Asynchronous HTTP handlers public class MyHttpModule : IHttpModule { public class MyAsyncHandler : private async Task ScrapeHtmlPage(object caller, EventArgs e) HttpTaskAsyncHandler { { await ... } public override async Task public void Init(HttpApplication ProcessRequestAsync(HttpContext context) { context) EventHandlerTaskAsyncHelper helper = { new EventHandlerTaskAsyncHelper(ScrapeHtmlPage); context.AddOnPostAuthorizeRequestAsync( await 
 helper.BeginEventHandler, helper.EndEventHandler); } } } }
  • 14. ASP.Net MVC 4 Timeout Controller [AsyncTimeout(2000)] Derive from AsyncController ?? [HandleError(ExceptionType = typeof(TaskCanceledException), View = "TimedOut")] Actions async methods returning Task or Task<ActionResult>
  • 15. ASP.Net WebForms Page Markup <%@ Page Language="C#" Async="true" AsyncTimeOut="2" CodeBehind="AsyncPage.aspx.cs" %> Page_Load method Register the async method The async mehtod will be asynchronoiusly executed after PreRender stage in page lifecycle
  • 16. WCF Service: Async operations Client: Async proxies [ServiceContract] Use svcutil or Add Service Reference public interface IDemoService { [OperationContract] var proxy = new Task<string> GetStockQuoteAsync(string ticker); StockQuoteService.StockQuoteSoapClie } nt(); public class DemoService : IDemoService var quote = await { proxy.GetQuoteAsync("MSFT"); public async Task<string> GetStockQuoteAsync (string ticker) { await ... } }
  • 17. VS 2012 Unit Tests Async Test Methods – return Task Test Frameworks [TestMethod] MS Test – Supports async, Built in test public async Task UnitTestMethod() provider { xUnit – Supports async in v1.9, await Task.Delay(1000); downloadable test provider Assert.AreEqual(1,1); NUnit – Doesn’t support async, } downloadable test provider Execution Time 1 sec
  • 18. Metro and WinRT http://blogs.msdn.com/b/windowsappdev/archive/2012/06/14/exposing-net-tasks- as-winrt-asynchronous-operations.aspx http://blogs.msdn.com/b/windowsappdev/archive/2012/03/20/keeping-apps-fast- and-fluid-with-asynchrony-in-the-windows-runtime.aspx http://blogs.msdn.com/b/windowsappdev/archive/2012/04/24/diving-deep-with- winrt-and-await.aspx Watch the other sessions on Metro IAsyncInfo App Development All async methods in WinRT implements this interface and 4 other Compiler Magic IAsyncAction IAsyncInfo has the awaitable pattern IAsyncOperation<TResult> The C# and VB compiler will convert IAsyncActionWithProgress<TProgress> WinRT async methods to return Tasks IAsyncOperationWithProgress<TResult, TProgress>
  • 19. Choosing Sync vs Async Synchronous Operations are simple or short-running CPU bound operations Simplicity is more important Asynchronous I/O bound operations (DB, network, disk) Provide cancellation support Parallelism is more important
  • 20. ADO.Net Tabular Data Stream Protocol Worker Thread reader.NextResult() i/o “DONE” “DONE” Result Set Token Result Set Token reader.Next() i/o “ROW” “ROW” “ROW” Token Row Token Row Token Reader.IsDBNull() i/o Column Column Column Column Column Header Data Header Data Header pa ck et s Large Column e.g. varbinary(8000)
  • 21. ADO.Net Recommendations Use Use CommandBehavior.SequentialAccess NextResultAsync() and ReadAsync() Unless reading large columns Use Synchronous column access Use IsDBNull, GetFieldValue<T> Streaming for massive columns Unless reading large columns GetStream() IsDBNullAsync, GetTextReader() GetFieldValueAsync<T> GetXmlReader()
  • 22. Resources ‱ http://msdn.microsoft.com/en-US/async ‱ VB.Net - http://blogs.msdn.com/b/lucian/ ‱ C# (implementation details) - https://msmvps.com/blogs/jon_skeet/archive /tags/Eduasync/default.aspx

Editor's Notes

  • #5: http://blogs.msdn.com/b/somasegar/archive/2010/10/28/making-asynchronous-programming-easy.aspxWith Async, our goal now is to make asynchronous programming far more approachable so asynchronous code is as easy to write and maintain as synchronous code. Making your code asynchronous should require only simple changes and should be possible to implement in a non-disruptive manner in your code. At the same time, it should be evident when code is “going async” so that the inherently-concurrent nature of the method can be understood at a glance.
  • #7: http://en.wikipedia.org/wiki/Hollywood_principleThreads are too low levelThreads are not the answerThread creation is expensiveEach managed thread takes 1MB of stack spaceContext switching is expensiveWriting asynchronous methods is difficultUsing callbacks for continuationsError handling, Cancellation, Progress Reporting is complicatedDoesn’t feel natural
  • #8: Asynchronous operations can share a single thread for multiple control flowsThe UI and IOCP threads are provided by the CLR or OS – reuseCo-Operative multitasking. Wait for tasks to finish and yield control flow while awaiting.
  • #13: http://msdn.microsoft.com/en-us/library/ee728598.aspxOn the Web server, the .NET Framework maintains a pool of threads that are used to service ASP.NET requests. When a request arrives, a thread from the pool is dispatched to process that request. If the request is processed synchronously, the thread that processes the request is blocked while the request is being processed, and that thread cannot service another request. If all available threads might be blocked. This condition is known as thread starvation. When this condition is reached, the Web server queues requests. If the request queue becomes full, the Web server rejects requests with an HTTP 503 status (Server Too Busy). However, during an asynchronous call, the server is not blocked from responding to other requests while it waits for the first request to complete. Therefore, asynchronous requests prevent request queuing when there are many requests that invoke long-running operations.When an asynchronous action is invoked, the following steps occur:1. The Web server gets a thread from the thread pool (the worker thread) and schedules it to handle an incoming request. This worker thread initiates an asynchronous operation.2. The worker thread is returned to the thread pool to service another Web request.3. When the asynchronous operation is complete, it notifies ASP.NET.4. The Web server gets a worker thread from the thread pool (which might be a different thread from the thread that started the asynchronous operation) to process the remainder of the request, including rendering the response.http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx in IIS 7.5 and 7.0 integrated mode, ASP.NET restricts the number of concurrently executing requests. Obviously if the reqeusts are synchronous, then the number of concurrently executing requests is the same as the number of threads concurrently executing requests, but if the requests are asynchronous then these two numbers can be quite different as you could have far more requests than threads.
  • #14: http://www.asp.net/vnext/overview/whitepapers/whats-new
  • #15: http://msdn.microsoft.com/en-us/library/hh420390(v=vs.110).aspx
  • #16: http://msdn.microsoft.com/en-us/library/gg416514(v=vs.108).aspxhttp://blogs.msdn.com/b/nicd/archive/2007/04/16/dissection-of-an-asp-net-2-0-request-processing-flow.aspx
  • #21: http://blogs.msdn.com/b/adonet/archive/2012/04/20/using-sqldatareader-s-new-async-methods-in-net-4-5-beta.aspxhttp://blogs.msdn.com/b/adonet/archive/2012/07/15/using-sqldatareader-s-new-async-methods-in-net-4-5-beta-part-2-examples.aspx
  • #22: In roadmap for Entity Framework 6http://msdn.microsoft.com/en-us/library/hh556234(v=vs.110).aspx