Bonne nouvelle !!!

 

La CTP de Juin 2008 des extensions parallèle pour le Framework .NET 3.5 est disponible en téléchargement ici

 

Qu’apporte-t-elle de nouveau ?

 

De nouvelles fonctionnalités pour les classes Task<> et Future<>

Comme par exemple la possibilité de planifier des tâches à l’aide de la méthode ContinueWith dans un ordre prédéfini qui peut résoudre des problèmes d'ordonnancement de Tâches.

Exemple :

   static int A()

        {

            return 3;

        }

        static int B(int valueFromA)

        {

            return valueFromA * 2;

        }

        static string C(int valueFromB)

        {

            int z = 7 * valueFromB;

            return "La réponse est : " + z.ToString();

        }

 

var futureC = Future.Create(() => A()).ContinueWith (a=>B(a.Value)).ContinueWith (b=>C(b.Value));

            Console.WriteLine(futureC.Value);

 

Pour ceux qui souhaiteraient étudier ce problème spécifiquement, je vous encourage à allez voir le post suivant

Ordering the output of parallel computations

 

 

Une autre fonctionnalité intéressante est l’ajout de WaitAny, qui permet de réagir lorsque n’importe quelle tâche a finie sont travail.

 

var algorithms = new [] {

          Future.Create(() => Alg1()) ,

          Future.Create(() => Alg2()) ,

          Future.Create(() => Alg3()) ,

          Future.Create(() => Alg4()) };

      var result = algorithms[Task.WaitAny(algorithms)].Value;

 

 

Ici le code se poursuivra des que l’un des algos a fini.

 

Est-ce que cela signifie que les autres tâches seront arrêtées pour autant ?

A ma connaissance, non , il faudra prévoir un mécanisme manuel d’arrêt. Je publierais très prochainement sur MSDN France un article à ce sujet.

 

 

 

De nouvelles classes intéressantes ont été ajoutées comme par exemple des collections dites "Thread Safe".

En effet, une liste générique comme List<T>, ne prévoit de macanisme de synchronisation en écriture. Soient vous le prévoyez vous-même, soient désormais, vous utilisez les nouvelles collections telles que :

 

System.Threading.Collections.BlockingCollection<T>

 System.Threading.Collections.ConcurrentQueue<T>

 System.Threading.Collections.ConcurrentStack<T>

 

Par exemple la Liste BlockingCollection, utilise comme mécanisme de synchro en écriture,un objet de Sémaphore légé (nouveau dans cette CTP).

 

Vous retrouverez dans cette CTP les objets desynchro dits légérs (favorisant les performances) suivant :

 

System.Threading.CountdownEvent

System.Threading.LazyInit<T>

System.Threading.ManualResetEventSlim

System.Threading.SemaphoreSlim

System.Threading.SpinLock

System.Threading.SpinWait

System.Threading.WriteOnce<T>

 

Des nouveautés sur PLINQ également, mais que je vous laisse découvrir.

 

 

Enfin le Task Scheduler qui était jusqu’à cette CTP qu’un prototype (Une espèce de proof of concept) est désormais maintenant un projet à part entière. Basé sur un moteur plus robuste, plus efficace et plus performant, notre stratégie autour du développement parallèle s’affirme désormais comme une réalité qu’il faudra garder à l’esprit.

 

Eric Vernié

 

Merci à Eric pour cette note sur PFX... et à bientôt sur ce sujet passionant... N'oubliez pas le 23/06 c'est fait pour vous... qui comme nous êtes passionné pour le Dev parallèle....

Eric