SlideShare a Scribd company logo
1 of 22
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

What's hot

Kafka Streams: What it is, and how to use it?
Kafka Streams: What it is, and how to use it?Kafka Streams: What it is, and how to use it?
Kafka Streams: What it is, and how to use it?confluent
 
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...joaomatosf_
 
Asynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & PromisesAsynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & PromisesHùng Nguyễn Huy
 
History of asynchronous in .NET
History of asynchronous in .NETHistory of asynchronous in .NET
History of asynchronous in .NETMarcin Tyborowski
 
Webpack Introduction
Webpack IntroductionWebpack Introduction
Webpack IntroductionAnjali Chawla
 
Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.Visual Engineering
 
Hello, kafka! (an introduction to apache kafka)
Hello, kafka! (an introduction to apache kafka)Hello, kafka! (an introduction to apache kafka)
Hello, kafka! (an introduction to apache kafka)Timothy Spann
 
Introducing Async/Await
Introducing Async/AwaitIntroducing Async/Await
Introducing Async/AwaitValeri Karpov
 
Kafka error handling patterns and best practices | Hemant Desale and Aruna Ka...
Kafka error handling patterns and best practices | Hemant Desale and Aruna Ka...Kafka error handling patterns and best practices | Hemant Desale and Aruna Ka...
Kafka error handling patterns and best practices | Hemant Desale and Aruna Ka...HostedbyConfluent
 
Introduction To Single Page Application
Introduction To Single Page ApplicationIntroduction To Single Page Application
Introduction To Single Page ApplicationKMS Technology
 
Introduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processingIntroduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processingTill Rohrmann
 
Modern JavaScript Frameworks: Angular, React & Vue.js
Modern JavaScript Frameworks: Angular, React & Vue.jsModern JavaScript Frameworks: Angular, React & Vue.js
Modern JavaScript Frameworks: Angular, React & Vue.jsJonas Bandi
 
Building real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case studyBuilding real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case studyKishore Gopalakrishna
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootMikalai Alimenkou
 
More Data, More Problems: Scaling Kafka-Mirroring Pipelines at LinkedIn
More Data, More Problems: Scaling Kafka-Mirroring Pipelines at LinkedIn More Data, More Problems: Scaling Kafka-Mirroring Pipelines at LinkedIn
More Data, More Problems: Scaling Kafka-Mirroring Pipelines at LinkedIn confluent
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.jsVikash Singh
 
Pentesting Modern Web Apps: A Primer
Pentesting Modern Web Apps: A PrimerPentesting Modern Web Apps: A Primer
Pentesting Modern Web Apps: A PrimerBrian Hysell
 

What's hot (20)

Kafka Streams: What it is, and how to use it?
Kafka Streams: What it is, and how to use it?Kafka Streams: What it is, and how to use it?
Kafka Streams: What it is, and how to use it?
 
Async/Await
Async/AwaitAsync/Await
Async/Await
 
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...
 
Asynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & PromisesAsynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & Promises
 
Nodejs presentation
Nodejs presentationNodejs presentation
Nodejs presentation
 
History of asynchronous in .NET
History of asynchronous in .NETHistory of asynchronous in .NET
History of asynchronous in .NET
 
Webpack Introduction
Webpack IntroductionWebpack Introduction
Webpack Introduction
 
Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.
 
Hello, kafka! (an introduction to apache kafka)
Hello, kafka! (an introduction to apache kafka)Hello, kafka! (an introduction to apache kafka)
Hello, kafka! (an introduction to apache kafka)
 
Introducing Async/Await
Introducing Async/AwaitIntroducing Async/Await
Introducing Async/Await
 
Kafka error handling patterns and best practices | Hemant Desale and Aruna Ka...
Kafka error handling patterns and best practices | Hemant Desale and Aruna Ka...Kafka error handling patterns and best practices | Hemant Desale and Aruna Ka...
Kafka error handling patterns and best practices | Hemant Desale and Aruna Ka...
 
Introduction To Single Page Application
Introduction To Single Page ApplicationIntroduction To Single Page Application
Introduction To Single Page Application
 
Introduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processingIntroduction to Apache Flink - Fast and reliable big data processing
Introduction to Apache Flink - Fast and reliable big data processing
 
Modern JavaScript Frameworks: Angular, React & Vue.js
Modern JavaScript Frameworks: Angular, React & Vue.jsModern JavaScript Frameworks: Angular, React & Vue.js
Modern JavaScript Frameworks: Angular, React & Vue.js
 
Building real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case studyBuilding real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case study
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring Boot
 
More Data, More Problems: Scaling Kafka-Mirroring Pipelines at LinkedIn
More Data, More Problems: Scaling Kafka-Mirroring Pipelines at LinkedIn More Data, More Problems: Scaling Kafka-Mirroring Pipelines at LinkedIn
More Data, More Problems: Scaling Kafka-Mirroring Pipelines at LinkedIn
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Node js introduction
Node js introductionNode js introduction
Node js introduction
 
Pentesting Modern Web Apps: A Primer
Pentesting Modern Web Apps: A PrimerPentesting Modern Web Apps: A Primer
Pentesting Modern Web Apps: A Primer
 

Similar to Async Programming in C# 5

Ddd melbourne 2011 C# async ctp
Ddd melbourne 2011  C# async ctpDdd melbourne 2011  C# async ctp
Ddd melbourne 2011 C# async ctpPratik Khasnabis
 
Sync with async
Sync with  asyncSync with  async
Sync with asyncprabathsl
 
Asynchronous in dot net4
Asynchronous in dot net4Asynchronous in dot net4
Asynchronous in dot net4Wei Sun
 
Asynchronous programming in .net 4.5 with c#
Asynchronous programming in .net 4.5 with c#Asynchronous programming in .net 4.5 with c#
Asynchronous programming in .net 4.5 with c#Binu Bhasuran
 
Parallel Processing
Parallel ProcessingParallel Processing
Parallel ProcessingRTigger
 
End to-end async and await
End to-end async and awaitEnd to-end async and await
End to-end async and awaitvfabro
 
Asynchronous programming in ASP.NET
Asynchronous programming in ASP.NETAsynchronous programming in ASP.NET
Asynchronous programming in ASP.NETAlex Thissen
 
Binary Studio Academy: Concurrency in C# 5.0
Binary Studio Academy: Concurrency in C# 5.0Binary Studio Academy: Concurrency in C# 5.0
Binary Studio Academy: Concurrency in C# 5.0Binary Studio
 
C# 5 deep drive into asynchronous programming
C# 5 deep drive into asynchronous programmingC# 5 deep drive into asynchronous programming
C# 5 deep drive into asynchronous programmingPraveen Prajapati
 
Task parallel library presentation
Task parallel library presentationTask parallel library presentation
Task parallel library presentationahmed sayed
 
Copper: A high performance workflow engine
Copper: A high performance workflow engineCopper: A high performance workflow engine
Copper: A high performance workflow enginedmoebius
 
Workshop: Async and Parallel in C#
Workshop: Async and Parallel in C#Workshop: Async and Parallel in C#
Workshop: Async and Parallel in C#Rainer Stropek
 
Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)Yoshifumi Kawai
 
Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Databricks
 
Introduction tomcat7 servlet3
Introduction tomcat7 servlet3Introduction tomcat7 servlet3
Introduction tomcat7 servlet3JavaEE Trainers
 
Server side JavaScript: going all the way
Server side JavaScript: going all the wayServer side JavaScript: going all the way
Server side JavaScript: going all the wayOleg Podsechin
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)jeffz
 

Similar to Async Programming in C# 5 (20)

Ddd melbourne 2011 C# async ctp
Ddd melbourne 2011  C# async ctpDdd melbourne 2011  C# async ctp
Ddd melbourne 2011 C# async ctp
 
Sync with async
Sync with  asyncSync with  async
Sync with async
 
Asynchronous in dot net4
Asynchronous in dot net4Asynchronous in dot net4
Asynchronous in dot net4
 
Asynchronous programming in .net 4.5 with c#
Asynchronous programming in .net 4.5 with c#Asynchronous programming in .net 4.5 with c#
Asynchronous programming in .net 4.5 with c#
 
Parallel Processing
Parallel ProcessingParallel Processing
Parallel Processing
 
End to-end async and await
End to-end async and awaitEnd to-end async and await
End to-end async and await
 
Asynchronous programming in ASP.NET
Asynchronous programming in ASP.NETAsynchronous programming in ASP.NET
Asynchronous programming in ASP.NET
 
Binary Studio Academy: Concurrency in C# 5.0
Binary Studio Academy: Concurrency in C# 5.0Binary Studio Academy: Concurrency in C# 5.0
Binary Studio Academy: Concurrency in C# 5.0
 
C# 5 deep drive into asynchronous programming
C# 5 deep drive into asynchronous programmingC# 5 deep drive into asynchronous programming
C# 5 deep drive into asynchronous programming
 
Training – Going Async
Training – Going AsyncTraining – Going Async
Training – Going Async
 
Task parallel library presentation
Task parallel library presentationTask parallel library presentation
Task parallel library presentation
 
Copper: A high performance workflow engine
Copper: A high performance workflow engineCopper: A high performance workflow engine
Copper: A high performance workflow engine
 
Aspdotnet
AspdotnetAspdotnet
Aspdotnet
 
Workshop: Async and Parallel in C#
Workshop: Async and Parallel in C#Workshop: Async and Parallel in C#
Workshop: Async and Parallel in C#
 
Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)
 
Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...
 
Introduction tomcat7 servlet3
Introduction tomcat7 servlet3Introduction tomcat7 servlet3
Introduction tomcat7 servlet3
 
Server side JavaScript: going all the way
Server side JavaScript: going all the wayServer side JavaScript: going all the way
Server side JavaScript: going all the way
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
 
JS everywhere 2011
JS everywhere 2011JS everywhere 2011
JS everywhere 2011
 

More from Pratik Khasnabis

Open API (aka Swagger) - DDD by Night May 2020
Open API (aka Swagger) - DDD by Night May 2020Open API (aka Swagger) - DDD by Night May 2020
Open API (aka Swagger) - DDD by Night May 2020Pratik Khasnabis
 
Microsoft Azure fundamentals for AWS practitioners
Microsoft Azure fundamentals for AWS practitionersMicrosoft Azure fundamentals for AWS practitioners
Microsoft Azure fundamentals for AWS practitionersPratik Khasnabis
 
Deploying a website in Azure using ARM templates
Deploying a website in Azure using ARM templatesDeploying a website in Azure using ARM templates
Deploying a website in Azure using ARM templatesPratik Khasnabis
 
Recapping C# 6.0 and A First Look Into C# 7.0
Recapping C# 6.0 and A First Look Into C# 7.0Recapping C# 6.0 and A First Look Into C# 7.0
Recapping C# 6.0 and A First Look Into C# 7.0Pratik Khasnabis
 
Deploy a Website in Azure using ARM Templates
Deploy a Website in Azure using ARM TemplatesDeploy a Website in Azure using ARM Templates
Deploy a Website in Azure using ARM TemplatesPratik Khasnabis
 
DDD Melbourne 2014 security in ASP.Net Web API 2
DDD Melbourne 2014 security in ASP.Net Web API 2DDD Melbourne 2014 security in ASP.Net Web API 2
DDD Melbourne 2014 security in ASP.Net Web API 2Pratik Khasnabis
 

More from Pratik Khasnabis (9)

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

Recently uploaded

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Recently uploaded (20)

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

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

  1. 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.
  2. 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
  3. 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.
  4. 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.
  5. http://www.asp.net/vnext/overview/whitepapers/whats-new
  6. http://msdn.microsoft.com/en-us/library/hh420390(v=vs.110).aspx
  7. 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
  8. 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
  9. In roadmap for Entity Framework 6http://msdn.microsoft.com/en-us/library/hh556234(v=vs.110).aspx