palais des
congrès
Paris




7, 8 et 9
février 2012
Vous êtes dans l’AMPHI BLEU
LAN208: Les nouveautés
du Framework .NET 4.5

7/02/2012 – 11H-12H
Roch BADUEL
Architecte
MCNEXT
MCNEXT

  Depuis 2007 - 150 Collaborateurs – Paris-Lyon-
                     Genève

   100 % Microsoft - 4 pôles d’expertises

      Dot Share
     NET Point
    Business
    Intelligence
                    Biz
    Microsoft      Talk
Objectifs



                                                 WCF, WPF, WF,
     Qu’est ce que      L’asynchrone au sein       ASP.NET
 Framework .NET 4.5 ?      du Framework




                                                     Pointeurs
           Démos, Démos, Démos                 Questions / Réponses
Le framework .NET 4.5
Rappel – Le framework .NET



    Entity
              ASP.                            Win     Work      And
   Frame-                  WCF      WPF
              NET                            Forms    Flow      more!
    work




             BCL
                                 CLR                   Profiling&
                                                     Debugging APIs

     JIT &         Garbage       Modèle de     Gestion       Loader &
     NGEN          Collector      sécurité    Exception       Binder
Versions de .NET

  .NET 4.5 est une mise à jour au dessus de .NET
  4
    Actuellement en preview

    Peut être inclus dans vos installeurs sur Win7,

     Win2K8, etc.
    Sera inclus dans les prochaines versions de

     Windows
    Pourra être installé avec Windows Update
                                 3.5

                                 3.0
                                             4.5
    .NET 1.0     .NET 1.1      .NET 2.0    .NET 4.0

     2002        2003       2005 - 2008    2010
L’asynchrone au sein du
framework
Modifications et
nouveautés
 Intégration dans le langage de async/await
 (Ex CTP)
 Extension des fonctionnalités sur les Tasks
 Introduction des DataFlow
 (Ex CTP)
 Rajout de méthodes Asynchrones (Renvoyant des Tasks)
Asynchrone ?

  Une tendance et une nécessité
  Eviter de bloquer le thread (notamment UI)
  Présent depuis le framework 1.0
  (BeginMethod, EndMethod)
  A évolué :
    Asynchronous Programming Model (APM)

    Event based Asynchronous Programming (EAP)

    Task based Asynchronous Programming (TAP : .NET

     4)
Asynchronous Programming
Model (APM)


  // Modèle .NET 1

  file.BeginRead(buffer, 0, maxLength, asyncResult => {

     int numBytesRead = file.EndRead(asyncResult);
     // faire quelque chose avec buffer

  }, null);
Event-based Asynchronous
Programming (EAP)

 //Modèle .NET 2

 webClient.DownloadStringCompleted += (sender,
 args) => {

      string html = args.Result;
      // Faire quelque chose avec html
 };

 webClient.DownloadStringAsync(new
 Uri("http://example.com"));
Task-based Asynchronous
Programming (TAP)
 Task<string> htmlTask =
 webClient.DownloadStringTaskAsync(url);


      string html = htmlTask.Result; // Sync
      (bloquant)

        htmlTask.ContinueWith(task => {
             string html = task.Result; // Async,
        C# 4
        });

         string html = await htmlTask; // Async,
         C# 5
Utilisation de async / await

 public
 Task CopyStreamToStream             (Stream source,
                                Stream destination)
 {
     byte[] buffer = new byte[0x1000];
     int numRead;

     while ((numRead =

        source.Read         (buffer, 0, buffer.Length)) != 0)
          {

 destination.Write        (buffer, 0, numRead);
         }
 }
DEMO

TAP / Async / Await
Les méthodes asynchrones

  Sont marquées avec le mot clé async
  Elles retournent soit void soit Task<T>
  Elles utilisent l’opérateur await
  Elles reprennent quand la méthode appelée par await a
  finie
  Elles s’executent dans le contexte de synchronisation de
  l’appelant
  Elles permettent d’écrire du code asynchrone de la même
  manière que du code synchrone
Méthodes rajoutées à Task
  Task.Run
  var result = await Task.Run(() => { … });

  Task.Delay
      await Task.Delay(5000);

  Task.WhenAll / WhenAny
      Composition

  Task.Yield
      await Task.Yield()

  Task.ContinueWith
DataFlow
Modèle de programmation
parallèle
  .NET 4
    On part des données et on met en place le traitement.

    Typiquement combinaison de Tasks



  Dans l’autre sens?
    On développe une chaine de traitement,

     puis on injecte des données
    Application typique : traitement en mode « pipeline »
TPL Dataflow

  System.Threading.Tasks.Dataflow.dll
  Les DataFlow sont constitués de Blocks
    Un block est un élément qui traite des messages

     depuis une file
    Les blocks peuvent être chainés pour effectuer des

     traitements complexes
       Réseau de Block
TPL Dataflow
Exemple de traitement simple


    var ab = new ActionBlock<int>(i =>
    {
                                       ActionBlock<int>
        Process(i);              Message Queue

    });
                                               Process(4);
                                               Process(3);
                                               Process(2);
                                               Process(1);
                                               Process(0);
    for(int i = 0; i < 5; i++)
    {
        ab.Post(i);
             4
             3
             2
             1
             0
    }
TPL Dataflow
Interconnecter les Blocks
       Les blocks peuvent être chainés pour implémenter des
        réseaux
       Exemple de Block :
          ActionBlock<T> : exécute un délégué

          TransformBlock<T1,T2>: convertie T1 vers T2

          BroadcastBlock<T> : permet de diffuser vers plusieurs blocks
           un message
          JoinBlock<T1,T2> : attend un élément de chaque entrée pour

           créer un message en sortie
DEMO

DataFlow
Plus d’infos sur TPL /
Parallélisme / DataFlow
  Articles d’Eric Vernie (Microsoft France DPE)
    Introduction à TPL DataFlow (VB ou C#)

        http://msdn.microsoft.com/fr-fr/vbasic/hh301105

        http://msdn.microsoft.com/fr-fr/vcsharp/hh301085




  Blog développement parallèle
    http://blogs.msdn.com/b/devpara/
Autres nouveautés “core”
+ de nouveautés
    Nouvelle API pour les applications consommant des
    service http
        System.Net.Http (HttpClient, HttpRequestMessage…)
    MEF (Managed Extensibility Framework)
        Support des types géneric
        La composition peut être basée sur des règles:
           Les attributs ne sont plus obligatoire

           Utilise RegistrationBuilder pour injecter des attributs
               ReflectionContext : expose des types « altérés »


 [Import(typeof(ICalculator))]            [Export(typeof(ICalculator))]
 public ICalculator calculator;           class MySimpleCalculator : ICalculator

    Portable library : Subset commun à .NET / WP /
    XBOX / SL
    Compatibilité binaire
WCF

 Contract First :
   Génération du service depuis le WSDL

    (svcutil /serviceContract)
 WSDL en un seul fichier : ?singleWSDL
     suppression des xsd:import
 Support des WebSocket : NetHttp(s)Binding
 Fichiers de configuration client simplifiés (pas les valeurs
 par défaut)
 Support d’UDP
 Paste XML as classes (VS)
 Add Service Reference pour les portable library
DEMO

WCF
Workflow

  Expressions C#
  State machines
  Service Contract First
  Performance
ASP.NET

  HTML5
  Démarrage plus rapide (multi-core JIT)
  WebSocket
  Asynchrone (HttpRequest / HttpResponse, Module /
  Handler)
  Externalisation du code de validation client dans un seul js
  externe.
  Javascript Bundling / minification
  Librairie Anti – Cross-Site-Scripting intégrée
WPF
 Ruban inclus dans .NET 4.5

 « NotifyPropertyChanged » sur les propriétés statiques
 (convention de nommage)
 Possibilité de modifier les collections « bindées » depuis un
 thread autre que UI
 Introduction de INotifyDataErrorInfo (SL) – validation synchrone
 / asynchrone
 Introduction de ICustomTypeProvider (SL5) – Binding sur des
 propriétés définies par code (ex: execution)
 Binding: Delay pour mise à jour de la source
 ItemsControl : performance en mode virtualisé sur des
 collections avec groupage
DEMO

WPF
Quelques sessions sur
VS11/NET 4.5
  Construire des applications parallèles avec Visual
  Studio 11 quoi de neuf ? (LAN210)

  WPF 4.5 : Quoi de neuf pour les développeurs ?
  (RDA105)

  Quoi de neuf dans ASP.NET 4.5 (RIA219)
Vous êtes dans l’AMPHI BLEU
Microsoft France
39, quai du président Roosevelt
  92130 Issy-Les-Moulineaux

 www.microsoft.com/france

Les nouveautés du Framework .NET 4.5

  • 1.
  • 2.
    Vous êtes dansl’AMPHI BLEU
  • 3.
    LAN208: Les nouveautés duFramework .NET 4.5 7/02/2012 – 11H-12H Roch BADUEL Architecte MCNEXT
  • 4.
    MCNEXT Depuis2007 - 150 Collaborateurs – Paris-Lyon- Genève 100 % Microsoft - 4 pôles d’expertises Dot Share NET Point Business Intelligence Biz Microsoft Talk
  • 5.
    Objectifs WCF, WPF, WF, Qu’est ce que L’asynchrone au sein ASP.NET Framework .NET 4.5 ? du Framework Pointeurs Démos, Démos, Démos Questions / Réponses
  • 6.
  • 7.
    Rappel – Leframework .NET Entity ASP. Win Work And Frame- WCF WPF NET Forms Flow more! work BCL CLR Profiling& Debugging APIs JIT & Garbage Modèle de Gestion Loader & NGEN Collector sécurité Exception Binder
  • 8.
    Versions de .NET .NET 4.5 est une mise à jour au dessus de .NET 4  Actuellement en preview  Peut être inclus dans vos installeurs sur Win7, Win2K8, etc.  Sera inclus dans les prochaines versions de Windows  Pourra être installé avec Windows Update 3.5 3.0 4.5 .NET 1.0 .NET 1.1 .NET 2.0 .NET 4.0 2002 2003 2005 - 2008 2010
  • 9.
  • 10.
    Modifications et nouveautés Intégrationdans le langage de async/await (Ex CTP) Extension des fonctionnalités sur les Tasks Introduction des DataFlow (Ex CTP) Rajout de méthodes Asynchrones (Renvoyant des Tasks)
  • 11.
    Asynchrone ? Une tendance et une nécessité Eviter de bloquer le thread (notamment UI) Présent depuis le framework 1.0 (BeginMethod, EndMethod) A évolué :  Asynchronous Programming Model (APM)  Event based Asynchronous Programming (EAP)  Task based Asynchronous Programming (TAP : .NET 4)
  • 12.
    Asynchronous Programming Model (APM) // Modèle .NET 1 file.BeginRead(buffer, 0, maxLength, asyncResult => { int numBytesRead = file.EndRead(asyncResult); // faire quelque chose avec buffer }, null);
  • 13.
    Event-based Asynchronous Programming (EAP) //Modèle .NET 2 webClient.DownloadStringCompleted += (sender, args) => { string html = args.Result; // Faire quelque chose avec html }; webClient.DownloadStringAsync(new Uri("http://example.com"));
  • 14.
    Task-based Asynchronous Programming (TAP) Task<string> htmlTask = webClient.DownloadStringTaskAsync(url); string html = htmlTask.Result; // Sync (bloquant) htmlTask.ContinueWith(task => { string html = task.Result; // Async, C# 4 }); string html = await htmlTask; // Async, C# 5
  • 15.
    Utilisation de async/ await public Task CopyStreamToStream (Stream source, Stream destination) { byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read (buffer, 0, buffer.Length)) != 0) { destination.Write (buffer, 0, numRead); } }
  • 16.
  • 17.
    Les méthodes asynchrones Sont marquées avec le mot clé async Elles retournent soit void soit Task<T> Elles utilisent l’opérateur await Elles reprennent quand la méthode appelée par await a finie Elles s’executent dans le contexte de synchronisation de l’appelant Elles permettent d’écrire du code asynchrone de la même manière que du code synchrone
  • 18.
    Méthodes rajoutées àTask Task.Run var result = await Task.Run(() => { … }); Task.Delay  await Task.Delay(5000); Task.WhenAll / WhenAny  Composition Task.Yield  await Task.Yield() Task.ContinueWith
  • 19.
  • 20.
    Modèle de programmation parallèle .NET 4  On part des données et on met en place le traitement.  Typiquement combinaison de Tasks Dans l’autre sens?  On développe une chaine de traitement, puis on injecte des données  Application typique : traitement en mode « pipeline »
  • 21.
    TPL Dataflow System.Threading.Tasks.Dataflow.dll Les DataFlow sont constitués de Blocks  Un block est un élément qui traite des messages depuis une file  Les blocks peuvent être chainés pour effectuer des traitements complexes  Réseau de Block
  • 22.
    TPL Dataflow Exemple detraitement simple var ab = new ActionBlock<int>(i => { ActionBlock<int> Process(i); Message Queue }); Process(4); Process(3); Process(2); Process(1); Process(0); for(int i = 0; i < 5; i++) { ab.Post(i); 4 3 2 1 0 }
  • 23.
    TPL Dataflow Interconnecter lesBlocks  Les blocks peuvent être chainés pour implémenter des réseaux  Exemple de Block :  ActionBlock<T> : exécute un délégué  TransformBlock<T1,T2>: convertie T1 vers T2  BroadcastBlock<T> : permet de diffuser vers plusieurs blocks un message  JoinBlock<T1,T2> : attend un élément de chaque entrée pour créer un message en sortie
  • 24.
  • 25.
    Plus d’infos surTPL / Parallélisme / DataFlow Articles d’Eric Vernie (Microsoft France DPE)  Introduction à TPL DataFlow (VB ou C#)  http://msdn.microsoft.com/fr-fr/vbasic/hh301105  http://msdn.microsoft.com/fr-fr/vcsharp/hh301085 Blog développement parallèle  http://blogs.msdn.com/b/devpara/
  • 26.
  • 27.
    + de nouveautés Nouvelle API pour les applications consommant des service http  System.Net.Http (HttpClient, HttpRequestMessage…) MEF (Managed Extensibility Framework)  Support des types géneric  La composition peut être basée sur des règles:  Les attributs ne sont plus obligatoire  Utilise RegistrationBuilder pour injecter des attributs  ReflectionContext : expose des types « altérés » [Import(typeof(ICalculator))] [Export(typeof(ICalculator))] public ICalculator calculator; class MySimpleCalculator : ICalculator Portable library : Subset commun à .NET / WP / XBOX / SL Compatibilité binaire
  • 28.
    WCF Contract First:  Génération du service depuis le WSDL (svcutil /serviceContract) WSDL en un seul fichier : ?singleWSDL suppression des xsd:import Support des WebSocket : NetHttp(s)Binding Fichiers de configuration client simplifiés (pas les valeurs par défaut) Support d’UDP Paste XML as classes (VS) Add Service Reference pour les portable library
  • 29.
  • 30.
    Workflow ExpressionsC# State machines Service Contract First Performance
  • 31.
    ASP.NET HTML5 Démarrage plus rapide (multi-core JIT) WebSocket Asynchrone (HttpRequest / HttpResponse, Module / Handler) Externalisation du code de validation client dans un seul js externe. Javascript Bundling / minification Librairie Anti – Cross-Site-Scripting intégrée
  • 32.
    WPF Ruban inclusdans .NET 4.5 « NotifyPropertyChanged » sur les propriétés statiques (convention de nommage) Possibilité de modifier les collections « bindées » depuis un thread autre que UI Introduction de INotifyDataErrorInfo (SL) – validation synchrone / asynchrone Introduction de ICustomTypeProvider (SL5) – Binding sur des propriétés définies par code (ex: execution) Binding: Delay pour mise à jour de la source ItemsControl : performance en mode virtualisé sur des collections avec groupage
  • 33.
  • 34.
    Quelques sessions sur VS11/NET4.5 Construire des applications parallèles avec Visual Studio 11 quoi de neuf ? (LAN210) WPF 4.5 : Quoi de neuf pour les développeurs ? (RDA105) Quoi de neuf dans ASP.NET 4.5 (RIA219)
  • 35.
    Vous êtes dansl’AMPHI BLEU
  • 36.
    Microsoft France 39, quaidu président Roosevelt 92130 Issy-Les-Moulineaux www.microsoft.com/france