c# async on ios and android - craig dunn, developer evangelist at xamarin

22
C# Async on iOS and Android Craig Dunn Developer Evangelist at Xamarin @conceptdev

Upload: xamarin

Post on 10-May-2015

5.212 views

Category:

Technology


4 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

C# Async on iOS and Android

Craig DunnDeveloper Evangelist at Xamarin

@conceptdev

Page 2: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

.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

Page 3: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

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

Page 4: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

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

Page 5: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

Xamarin APIs

• Xamarin.Mobile Geolocator.GetPositionAsync()Contact.SaveThumbnailAsync()

• Xamarin.Auth

FormAuthenticator.SignInAsync()Request.GetResponseAsync(cancellationToken)

• and many more...

Xamarin cross-platform libraries

Page 6: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

Xamarin Component Store

• Many components already offer async APIs, eg. Parse!

Powerful, easy to use componentshttp://components.xamarin.com

Page 7: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

Using Asyncasync, await, cancellation and error handling

Page 8: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

DEMO1) Download Html string2) Download Jpeg image3) Save to Photo Album4) Return Html length

Page 9: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

Comparison

1) Download Html string2) Download Jpeg image3) Save to Photo Album

5) Error Handling4) Return Html length

6) InvokeOnMainThread

Callback Hell

Page 10: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

Comparison

1) Download Html string2) Download Jpeg image3) Save to Photo Album

5) Error Handling4) Return Html length

6) InvokeOnMainThread

Callback Hell

Page 11: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

1) Download Html string2) Download Jpeg image3) Save to Photo Album

5) Error Handling4) Return Html length

Comparison

Async-ified

Page 12: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

1) Download Html string2) Download Jpeg image3) Save to Photo Album

5) Error Handling4) Return Html length

Comparison

6) InvokeOnMainThreadone place

not required

Async-ified

Page 13: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

Comparison

1) Download Html string2) Download Jpeg image3) Save to Photo Album

5) Error Handling4) Return Html length

6) InvokeOnMainThread

old new!

Page 14: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

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

Page 15: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

How to use: async?• async modifier on methods, lambdas and anonymous methods

use Async suffix, eg LoadAsync, SendAsyncreturn 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

Page 16: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

How to use: await?• await keyword on awaitable objects (Tasks)

only within an async contextmarks a suspension point - control is returned to callercan’t be used in catch or finally blocksTask, Task<T> or a custom type

get a reference to the Task first

... or just await

Page 17: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

How to use: error handling?• async Task or Task<T>

Returned Task State == FaultedException re-thrown when task is awaited

• async void methods (event handlers)Exception is thrown on the current synchronization context and the app will crash...

Page 18: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

How to use: cancellation?

Page 19: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

How to use: progress reporting?

send events to track progress

Page 20: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

BONUS: Combinators• Wait on multiple tasks

Task.WhenAll (IEnumerable<Task>)- requires all the tasks to be completedTask.WhenAny(IEnumerable<Task>)- returns when any of the tasks completes

this kind of loop fine for small numbersof Tasks

Page 21: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

Don’t await... give it a try• Docs, Recipes

docs.xamarin.com/• Forums

forums.xamarin.com• Samples

github.com/xamarin

xamarin.com/download

Page 22: C# Async on iOS and Android - Craig Dunn, Developer Evangelist at Xamarin

Questions?