begin process at 2008 05 11 23:36:39
1 170 075 membres
528 nouveaux aujourd'hui
13 956 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[.NET3] WF ET LES ACTIVITÉS PARALLÈLES


Information sur le tutorial

Catégorie :.NET Tutorial .NET ( DotNet ) Date de création : 06/02/2008 11:32:39 Vu : 1 319 fois

Note :
Aucune note

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note


Description

Ce tutoriel  à pour objectif de vous fournir un aperçu des activités parallèles proposé dans WF. Dans un premier temps  nous verrons par l’exemple comment fonctionne l’activité Parallel et puis comment synchroniser l’accès aux données de plusieurs séquences d’exécutions parallèles. Une troisième activité existe ConditionedActivityGroup mais elle ne sera pas mise en application ici.

Source du projet disponible ici:
http://www.csharpfr.com/codes/NET3-WF-EXEMPLE-ACTIVITES-PARALLELES_45645.aspx

Tutorial

Activité Parallel


Cette activité vous permet d'exécuter des activités de s équences ( minimum de 2 ) de façon parallèle dans un même thread. Et oui l'activité Parallel n'est pas une activité dîtes multithreads comme son nom laisse penser.

Mais alors comment WF traite-il l es activités de séquences enfants d'une activité Parallel ? Simple, u ne activité de séquence est traitée individuellement jusqu'à ce qu'elle se termine puis transfère l'exécution à l'activité de séquence suivante. Ils ne sont donc pas vraiment exécutés de manière parallèle mais considérons la comme une vraie activité exécutant des activités de séquences en parallèle.


Ci-dessus voic i à quoi ressemble une activité Parallel avec ses séquences d'activités enfants. Bien évidement le nombre de séquences d'activités enfants peut aller bien au-delà de deux (clic droit sur l'activité puis ajouter une branche) .

Démo

Cette démo est en charge d'afficher une série de nombre (dur dur :) ) , et est composé d'une activité Parallel et de 2 séquences d'activités enfants. Chacune des séquences va contenir 2 activités Code , lesquels vont afficher dans la console leur série de nombre.

Commençons, o uvrez Visual Studio ( 2005 avec support de WF ou la version 2008 ) et crée z une application console de workflow séquentiel .

Sélectionnez dans la boite à outils l'activité Parallel et glissez-la sur votre workflow . Nous appellerons cette activité « ParallelAct » . Ensuite ajoutez dans chacune des 2 séquences d'activités enfants 2 activités Code nommés comme ci-dessous . Dans la propriété ExecuteCode de ses activités Code spécifiez le nom de la méthode qui sera appelé en respectant le nommage suivant « codeDisplay1 » pour l'activité Code « codeActNum1 » , etc . ...

N ous allons demander l'affichage par chacun des activités Code d'une série de nombre. Copiez le code suivant dans la page de code ( par défaut Workflow1 . cs ) associé à notre workflow .

private void codeDisplay1( object sender, EventArgs e)

{

Console .WriteLine();

for ( int i = 0; i < 10; i++)

Console .Write( "{0} " , i);

}


private void codeDisplay2( object sender, EventArgs e)

{

Console .WriteLine();

for ( int i = 10; i < 20; i++)

Console .Write( "{0} " , i);

}


private void codeDisplay3( object sender, EventArgs e)

{

Console .WriteLine();

for ( int i = 20; i < 30; i++)

Console .Write( "{0} " , i);

}


private void codeDisplay4( object sender, EventArgs e)

{

Console .WriteLine();

for ( int i = 30; i < 40; i++)

Console .Write( "{0} " , i);

}


Maintenant cliquez sur le workflow séquentiel afin d'afficher ses propriétés. Mettez la valeur « code Wait » sur la propriété Completed et copiez le code suivant pour nous permettre d'observer le résultat de l'exécution du workflow une fois terminée.

private void codeWait( object sender, EventArgs e)

{

Console .Read();

}


Analyse du résultat

Une fois le workflow séquentiel exécuté , voici le résultat obtenu ci-dessous.

La preuve est là :), les 2 séquences d'activités enfants sont bien exécutées de manière parallèle puisqu'une fois la séquence d'activité de gauche exécutée (activité Code « codeActNum1 ») , c'est au tour de la séquence d'activité de droite (activité Code « codeActNum3 ») de s' exécuter et ainsi de suite suivant le nombre de séquence d'activités enfants .



Activité SynchronizationScope


Pour synchroniser l es séquences d'activités entre autre présente dans une activité Parallel , WF met à disposition u ne activité particulière chargé de faire le travail à notre place . Je vous présente donc l'activité Synch r onizationScope .

Elle garantit que toutes les activités se trouvant à l'intérieur de celle-ci vont s'exécuter jusqu' au bout avant que l'exécution bascule vers un autre chemin parallèle (une autre séquence d'activités parallèle ) . Tien t ! Ce mécanisme me fait penser au mutex , qu'en pensez-vous ?


Démo

Cette démo se ra la même abordée précédemment, ici va être ajouté uniquement les activités SynchronizationScope afin de synchroniser l es 2 séquences d'exécutions parallèles de notre 1 ière démo.

Ouvrez la solution précédemment créée avec Visual Studio et ajoutez dans chacune des activités de séquences l'activité SynchronizationScope que vous nommerez « syncScopeAct1 » et « syncScopeAct2 ». A présent déplacez les activités Code contenu dans les séquences d'activités dans les activités de synchronisation. ( Voir capture ci-dessous).

S imple à mettre en place vous ne trouvez pas ? Cependant il reste une chose importante à définir à savoir la propriété SynchronizationHandles , mettez -y la valeur « SyncParallelAct » . Elle va fournir à nos activités de séquence une exécution en série (à condition justement que nos activités de synchronisation partage la même valeur SynchronizationHandles ) . Ceci ressemble encore une fois étrangement au mutex ! :)


R ésultat


Exécutez le workflow et regardons le résultat ensemble

Une capture vaut mieux qu'un long discourt.. La synchronisation des données est bien la. :)

06 février 2008 11:45:05 :
lien vers le projet
    Aucun commentaire pour le moment.

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Boutique

Boutique de goodies CodeS-SourceS