Sync vs. Async programming, Tasks, C# 5 async and await, WinRT async operations George Georgiev Telerik Corporation Technical Trainer itgeorge.net.
Post on 16-Dec-2015
244 Views
Preview:
Transcript
Asynchronous Programming with
C# and WinRTSync vs. Async programming, Tasks,
C# 5 async and await, WinRT async operations
George Georgiev
Telerik Corporationwww.telerik.com
Technical Traineritgeorge.net
Table of Contents
2
Synchronous Programming Problems CPU-demanding tasks, Resource
access Asynchronous Programming
Benefits & Difficulties Asynchronous Programming in C#
Threads, Tasks, Callback problems Async Programming with C# and WinRT Tasks with async & await Making Asynchronous methods Error handling async & await code
Synchronous Programming
Synchronous Programming
Executing program components sequentially i.e. "Sequential programming" Actions happen one after another Uses a single thread of a single
process Components wait for previous components to finish
Program resources are accessible at all points
4
Synchronous Programming Problems
Problems of Sync Programming If one component blocks,
entire program blocks
UI may become unresponsive
No utilization of multi-core systems
CPU demanding tasks delay execution of all other tasks
Accessing resources blocks entire program Especially problematic with web
resources5
Synchronous Programming Problems
Resource access problems Resources may be large
While loading, UI blocks
Program stops responding
Resources may be web-based Slow connections mean slow loading
Server may hang
While accessing, sync programs stop all other operations
6
Resource Access Problems
Live Demo
Synchronous Programming Problems
CPU-demanding tasks problems CPU-demanding problems will
freeze the program Program stops responding
Some CPU-demanding tasks are many smaller, independent tasks Sync programming must sequentially
go through them
8
CPU-demanding Tasks Problems
Live Demo
Asynchronous Programming
Asynchronous Programming
Program components can execute in parallel Some actions run alongside other
actions Each action happens in a separate
thread Independent components don't wait for each other
Program resources shared between threads If one thread uses a resources,
others shouldn't use it
11
Asynchronous Programming Benefits
Benefits of Async Programming If component blocks, other
components still run Until they need a resource from blocked
component
UI runs separately Always responsive
Utilization of multi-core systems Each core executes one or several
threads
CPU demanding tasks on "background" threads
Resource access runs on "background" threads
12
Asynchronous Programming
Difficulties Hard to imagine which code run at some time
Hard to notify a "component" has executed So far, callbacks were the way
Have to ensure callback runs in appropriate context (e.g. same thread it started in)
Have to protect resources One thread uses a resources, others
wait for it Hard to synchronize resource access
Deadlocks and race conditions can occur
13
Asynchronous Programming in C#
Async Programming in C#
Thread – smallest, independent piece of a program, executable by the OS "Subprocess" Usually contained inside a process
C# is a multi-threaded language by design Process/program can manage
multiple threads Threads execute in parallel
(handled by OS & CPU) Thread control mechanisms are
available in C#
15
Async Programming in C#
Threads and ThreadPool Direct control over thread execution
Callbacks for Thread events
Tasks – abstraction over Threads Represent work which will be
completed Wrap delegates/lambdas into objects
with Result
Task<int> represents an integer to be calculated
Handle threading "under the hood"
Callbacks for thread events
16
Async Programming with C#
Problems with callbacks Code becomes hard to track
Exceptions are not propagated properly
Thread context is not saved i.e. a callback defined in one thread
is not guaranteed to work on same thread
17
Async Programming with C#
Thread context problem example: UI thread attaches a callback to a
calculation method
Callback should prints results in a ListView
Calculation method completes -> callback is run But not on UI thread
The callback has no access to the UI thread's resources and we get a "wrong thread" exception 18
Tasks with async & awaitThe C# 5 approach to asynchronous
programming
Tasks with async & await
Tasks + async & await = modern approach Tasks can be "awaited" Methods can be marked as
asynchronous async and await keywords
Make sense when used together Enable "inline" multithreaded code Remove callbacks from code
("flatten") Code looks like normal sync code
Compiler generates appropriate callbacks
20
Tasks with async & await
async keyword – used on a method signature Marks a method, which can be
asynchronous Doesn't make it asynchronous – you
do, through an "await"
Wraps any returned result in a Task i.e. method return value is Task (or
void)
Means "this could wait for a resource or operation" If it starts waiting, return to the
calling method
When the wait is over, go back to called method
21
Tasks with async & await
await keyword Used in a method which has async
keyword Saves the context in a state
machine Marks waiting for a resource
Resource should be a Task<T>
Returns T result from Task<T>, when it completes
Means await the completion of a task While awaiting -> let the rest of the
program run
Awaiting over -> continue executing the next statements in the method
22
Tasks with async & await
Using built-in Async methods WinRT APIs are mainly
asynchronous Any operation which could run for
>50ms Is asynchronous in WinRT
Should be asynchronous in your code
Return some type of IAsyncOperation Can be awaited just like a Task
Behaves almost the same as a task
Limited control, but convertible to Task
23
Using built-in Async Methods
Live Demo
Making Asynchronous Methods
Offloading heavy computations to other threads
Making Asynchronous Methods
Any synchronous method can be used asynchronously
Tasks basically call a method In most cases Task.Run() will be
enough Returns a Task which can be awaited
Under the hood: Get a free thread
Execute the method in that thread26
Task<List<int>> primesTask = Task.Run(()=>CalcPrimes(0, 1000));List<int> primes = await primesTask;
Making Asynchronous Methods
"Patterns" to make your code asynchronous Make a method which returns a
Task, which is Run Call the method and "await" the task
result
Make an async method with a return type of Task (or void) (Optionally) start awaiting a result or
action
Return the result as a value (if you have a result)
The compiler will wrap it in a Task
Call the method and await the task result
27
Creating Your Own Async Methods
Live Demo
Error Handling in async & await Code
Try-catch statements with asynchronous code
Error Handling async & await
With async & await error-handling is straightforward Wrap error-prone code in try
statement
Catch exceptions
No callbacks in code, so no problem to write try-catch like in normal sync code
Under the hood: Try-catch is associated with the state
machines of the "await"s in it 30
Summary Store apps should be heavily asynchronous
Tasks with async & await Modern approach to asynchronous
programming
Make code easier to read, take care of thread context and other callback problems
In-depth reading on async & await in WinRT
Asynchronous programming will never be easy Be wary of deadlocks, race
conditions and the like
31
форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно
програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки
уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop
уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC
безплатен курс "Разработка на софтуер в cloud среда"
BG Coder - онлайн състезателна система - online judge
курсове и уроци по програмиране, книги – безплатно от Наков
безплатен курс "Качествен програмен код"
алго академия – състезателно програмиране, състезания
ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NETкурсове и уроци по програмиране – Телерик академия
курс мобилни приложения с iPhone, Android, WP7, PhoneGap
free C# book, безплатна книга C#, книга Java, книга C#Дончо Минков - сайт за програмиранеНиколай Костов - блог за програмиранеC# курс, програмиране, безплатно
?
? ? ??
?? ?
?
?
?
??
?
?
? ?
Questions?
?
Asynchronous Programming with C#
and WinRT
http://academy.telerik.com
Exercises1. Write an app, which calculates primes in a
range. Then gets all of the primes and for each
prime: Finds another prime, which begins with the same
digit as the first ends in Concatenates the two primes (first+second)
According to a setting: Either finds which of the concatenations are also
primes and lists them Or finds which of the concatenations are NOT
primes and lists them
The program should provide UI for 4 calculation requests, each with prime range input, list primes/list non-primes setting and display for the listed concatenations
The UI should always be responsive
33
top related