csharp 5 async
TRANSCRIPT
![Page 1: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/1.jpg)
www.dotnet.lv
![Page 2: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/2.jpg)
Valdis IljuconoksTechnical Fellow, Software ArchitectMicrosoft MVP
Geta AS, Viiar [email protected]://dotnet.lv/blogs/vi@tech_fellow
![Page 3: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/3.jpg)
C#
![Page 4: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/4.jpg)
5.0
![Page 5: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/5.jpg)
Async
![Page 6: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/6.jpg)
concurrency&
asynchrony
![Page 7: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/7.jpg)
sequentialconcurrent
parallelasynchronous
![Page 8: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/8.jpg)
agenda
predecessorsawaiting tasks
![Page 9: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/9.jpg)
predecessors
![Page 10: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/10.jpg)
Asynchronous Programming Model (APM)
Event-based Asynchronous Pattern (EAP)
![Page 11: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/11.jpg)
C# 1.0Component on a Managed Runtime
C# 2.0Generics
C# 3.0Language Integrated Query
C# 4.0Dynamics
C# 5.0Async
![Page 12: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/12.jpg)
awaiting tasks
![Page 13: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/13.jpg)
‘Task’ is representation of ongoing work
![Page 14: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/14.jpg)
var data = DownloadData(...);ProcessData(data);
var future = DownloadDataAsync(...); future.ContinueWith(data => ProcessData(data));
DownloadDataAsync ProcessData
STOP
ProcessDataDownloadData
![Page 15: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/15.jpg)
async / await
![Page 16: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/16.jpg)
similar to synchronous code
![Page 17: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/17.jpg)
referred as async method
![Page 18: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/18.jpg)
modifier (async) applied to
• a method• a lambda expression• an anonymous method
![Page 19: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/19.jpg)
keyword (await) used in
• body of an immediately enclosing method
• lambda expression• anonymous method
![Page 20: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/20.jpg)
await NOT used in
• synchronous function• query expression• catch or finally block• in lock statement• unsafe context
![Page 21: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/21.jpg)
absence of an operatorcause a compiler warning
![Page 22: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/22.jpg)
characteristics
![Page 23: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/23.jpg)
Async methods are intended to be non-blocking operations
![Page 24: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/24.jpg)
await expression does not block the current thread while the awaited task
is running
![Page 25: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/25.jpg)
expression signs up the rest of the method as a continuation
![Page 26: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/26.jpg)
and
![Page 27: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/27.jpg)
returns control to the caller of the async method.
![Page 28: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/28.jpg)
Method executes synchronouslytill first ‘await’.
![Page 29: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/29.jpg)
Async methods don't require multithreading
![Page 30: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/30.jpg)
async method doesn't run on its own thread
![Page 31: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/31.jpg)
method runs on the current synchronization context.
![Page 32: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/32.jpg)
Task based async pattern
![Page 33: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/33.jpg)
Async method return types
• void• Task• Task<TResult>
![Page 34: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/34.jpg)
async void FireAndForget(){ await t;}
FireAndForget();
![Page 35: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/35.jpg)
async Task JustSignalCompletionAsync(){ return;}
await JustSignalCompletionAsync();
![Page 36: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/36.jpg)
async Task<int> GetResultsAsync(){ return 5;}
var r = await GetResultsAsync();
![Page 37: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/37.jpg)
Naming conventions
• By convention, the suffix "Async" is added
• Async methods that return void are discouraged
• Exceptions to the naming convention (e.g. event handlers)
![Page 38: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/38.jpg)
?
![Page 39: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/39.jpg)
Valdis IljuconoksTechnical Fellow, Software ArchitectMicrosoft MVP
Geta AS, Viiar [email protected]://dotnet.lv/blogs/vi@tech_fellow
![Page 40: CSharp 5 Async](https://reader034.vdocuments.net/reader034/viewer/2022052213/5554fc6db4c905c35e8b46a8/html5/thumbnails/40.jpg)
www.dotnet.lv