Fast, fluid, instant-gratification apps are a must for mobile and C# async makes this much easier to accomplish. Xamarin Developer Evangelist, Craig Dunn, demos C# async on mobile apps.
Slides are from the Xamarin webinar on C# Async on iOS and Android on August 15, 2013.
C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin
1. C# Async on iOS and Android
Craig Dunn
Developer Evangelist at Xamarin
@conceptdev
2. .NET BCL APIs
• Lots of .NET APIs support async; for example:
HttpClient.GetStringAsync()
HttpClient.PostAsync()
FileStream.ReadAsync()
FileStream.CopyToAsync()
• and many more...
Complete .NET 4.5 coverage for BCL
3. iOS
• updated iOS APIs to be async; some examples:
ALAssetsLibrary.WriteImageToSavedPhotosAlbumAsync
()
ALAsset.SetImageDataAsync()
SKStoreProductViewController.LoadProductAsync()
CLGeocoder.GeocodeAddress()
NSUrlConnection.SendRequestAsync()
and many more...
174 async iOS native APIs
4. Android
• updated Android APIs to be async; some examples:
Android.Net.Http.AndroidHttpClient.ExecuteAsync()
Android.Bluetooth.BluetoothServerSocket.AcceptAsync(
)
Android.Graphics.BitmapFactory.DecodeFileAsync()
Android.Locations.Geocoder.GetFromLocationAsync()
Java.IO.File.ListAsync()
and many more...
337 async Android native APIs
8. DEMO1) Download Html string
2) Download Jpeg image
3) Save to Photo Album
4) Return Html length
9. Comparison
1) Download Html string
2) Download Jpeg image
3) Save to Photo Album
5) Error Handling
4) Return Html length
6) InvokeOnMainThread
Callback Hell
10. Comparison
1) Download Html string
2) Download Jpeg image
3) Save to Photo Album
5) Error Handling
4) Return Html length
6) InvokeOnMainThread
Callback Hell
11. 1) Download Html string
2) Download Jpeg image
3) Save to Photo Album
5) Error Handling
4) Return Html length
Comparison
Async-ified
12. 1) Download Html string
2) Download Jpeg image
3) Save to Photo Album
5) Error Handling
4) Return Html length
Comparison
6) InvokeOnMainThread
one place
not required
Async-ified
13. Comparison
1) Download Html string
2) Download Jpeg image
3) Save to Photo Album
5) Error Handling
4) Return Html length
6) InvokeOnMainThread
old new!
14. Compiler Magic
• async keyword informs the compiler that this method needs to
be “munged” (my term)
• await keyword indicates a suspension point where a callback
needs to be generated, along with error handling
• Continuations are generated after each suspension point
• Error handling (support for enclosing try-catch) is taken care
of
• All you need to remember is async and await
•
and use Tasks
15. How to use: async?
• async modifier on methods, lambdas and anonymous
methods
use Async suffix, eg LoadAsync, SendAsync
return Task or Task<T> preferably- Task for methods that don’t return a value
- Task<T> to return a value
- void for event handlers only
void for event handlers
16. How to use: await?
• await keyword on awaitable objects (Tasks)
only within an async context
marks a suspension point - control is returned to caller
can’t be used in catch or finally blocks
Task, Task<T> or a custom type
get a reference
to the Task first
... or just await
17. How to use: error handling?
• async Task or Task<T>
Returned Task State == Faulted
Exception re-thrown when task is awaited
• async void methods (event handlers)
Exception is thrown on the current synchronization
context and the app will crash...
19. How to use: progress reporting?
send events to
track progress
20. BONUS: Combinators
• Wait on multiple tasks
Task.WhenAll (IEnumerable<Task>)
-
requires all the tasks to be completed
Task.WhenAny(IEnumerable<Task>)
-
returns when any of the tasks completes
this kind of
loop fine for
small numbers
of Tasks
21. Don’t await... give it a try
• Docs, Recipes
docs.xamarin.com/
• Forums
forums.xamarin.com
• Samples
github.com/xamarin
xamarin.com/download