Save 37% off PRO during our Black Friday Sale! »

Async mit C# 5

Async mit C# 5

C# 5 bietet für die asynchrone Programmierung neue Keywords wie async und await. Die älteren async-Patterns sind Vergangenheit. Mit den neuen Keywords wird die asynchrone Programmierung viel einfacher. Diese Session zeigt, wie die neuen Keywords genutzt werden können, welche Features man damit bekommt, wie man selbst solche asynchronen Methoden erstellen kann und was hinter diesen Keywords steckt.

4736273aed82148d9d3c3ca192c1cd61?s=128

Christian Nagel

February 27, 2013
Tweet

Transcript

  1. Christian Nagel | thinktecture Async mit C# 5 think mobile!

  2. Christian Nagel • Microsoft Regional Director • Microsoft MVP •

    Consulting & Training http://www.cninnovation.com http://www.thinktecture.com http://weblogs.thinktecture.com/cnagel XING – LinkedIn – Twitter – Google+
  3. Agenda • Async Patterns • async & await • Error

    Handling • Cancellation
  4. Goals • Vorteile der Task-based Async Programmierung • Grundlagen und

    wichtigste Konzepte • Viele Code Samples
  5. None
  6. C# History .NET Generics LINQ Dynamic Async

  7. Async Patterns Async Pattern • .NET 1.0 Event- based Async

    Pattern • .NET 2.0 Task- based Async Pattern • .NET 4.5
  8. What we've seen • Async Pattern – Begin / End

    Methoden – Komplex zu verwenden • Async Event Pattern – Callback Handler im Thread mit Synchronization-Context – Einfacher aber falsche Reihenfolge • async / await Keywords – Programmierstil wie synchrone Programmierung
  9. Behind the Scenes

  10. Behind the Scenes

  11. What we've seen Async / Await – basiert auf Continuation

    Tasks – Neue Keywords sind einfacher
  12. None
  13. Error Handling

  14. What we've seen • void Methoden vermeiden • Fehler beim

    wartenden Aufrufer • Bei Composition: – Exception Information vom 1. Task – Resulting Task beinhaltet AggregateException
  15. None
  16. Cancellation

  17. What we've seen • Standard Cancellation Mechanismus seit .NET 4

    • CancellationTokenSource • Übergabe vom Cancellation Token an die asynchrone Methode • OperationCanceledException
  18. None
  19. Summary • UI Thread nicht blockieren • async / await

    ist einfach zu verwenden • Async Implementierungen im .NET Framework
  20. Call to Action • Start using Visual Studio 2012, C#

    5 und .NET 4.5 • Async mit allen Applikations-Typen • Async und Windows Store apps • 101 Async Samples
  21. Danke! • http://blog.cninnovation.com • http://weblogs.thinktecture.com • http://www.thinktecture.com Fragen?

  22. Images © • http://www.dreamstime.com/deriufra_info • http://www.dreamstime.com/natursports_info • http://www.dreamstime.com/amabrao_info • http://www.dreamstime.com/rushour_info

  23. CODE SAMPLES

  24. Sync - WebClient private void OnSearchSync(object sender, RoutedEventArgs e) {

    foreach (var req in GetSearchRequests()) { WebClient client = new WebClient(); client.Credentials = req.Credentials; string resp = client.DownloadString(req.Url); IEnumerable<SearchItemResult> images = req.Parse(resp); foreach (var image in images) { searchInfo.List.Add(image); } } }
  25. Async Pattern private void OnSeachAsyncPattern(object sender, RoutedEventArgs e) { Func<string,

    ICredentials, string> downloadString = (address, cred) => { var client = new WebClient(); client.Credentials = cred; return client.DownloadString(address); }; Action<SearchItemResult> addItem = item => searchInfo.List.Add(item); foreach (var req in GetSearchRequests()) { downloadString.BeginInvoke(req.Url, req.Credentials, ar => { string resp = downloadString.EndInvoke(ar); var images = req.Parse(resp); foreach (var image in images) { this.Dispatcher.Invoke(addItem, image); } }, null); } }
  26. Async Event Pattern private void OnAsyncEventPattern(object sender, RoutedEventArgs e) {

    foreach (var req in GetSearchRequests()) { var client = new WebClient(); client.Credentials = req.Credentials; client.DownloadStringCompleted += (sender1, e1) => { string resp = e1.Result; var images = req.Parse(resp); foreach (var image in images) { searchInfo.List.Add(image); } }; client.DownloadStringAsync(new Uri(req.Url)); } }
  27. Task-Based Async Pattern private async void OnTaskBasedAsyncPattern1(object sender, RoutedEventArgs e)

    { foreach (var req in GetSearchRequests()) { var client = new WebClient(); client.Credentials = req.Credentials; string resp = await client.DownloadStringTaskAsync(req.Url); var images = req.Parse(resp); foreach (var image in images) { searchInfo.List.Add(image); } } }