Je dois lancer plusieurs tâches longues en paralléle à partir de mon
site web, actuellement j'utilise le delegate mais il ne peu y avoir un
seul delegate simultané par site (?), l'avantage est que j'arrive a
dialoguer avec ( passage de parametres, demande de l'avancement du
traitement, detection de la fin du traitement, récupération des
paramétres retours).
Pensez vous qu'il est possible de faire la même chose avec des threads
?? et donc de lancer plusieurs threads en parallèle ?
que me conseillez vous ?
Voila le fonctionnement de mon appli un peu plus détaillé : ( asp.net web framework 1.1 )
depuis le main thread un utilisateur lance une sorte de controle des données ( appui bouton dans le navigateur web ) création d'un délégate (pour ne pas que la site soit gelé) qui 1 - récupére les données depuis la base (pendant ce temps je rafraichi ma page web tous les x secondes en testant l'avancement du délégate depuis une de ses méthodes ) 2 - controles ces données (idem pour la page web) 3 - "construction d'un compte rendu" (idem pour la page web) le délégate se termine en retournant le compte rendu, retour dans le main thread et affichage du compte rendu...... l'utilisateur a le choix entre quitter ou lancer un second traitement ( différent du 1er ) si 2eme traitement, rebelotte création d'un délégate en lui passant les infos en paramétres... 1 - traitement..... (.... page web) etc....
cela focntionne bien avec 1 utilisateur car d'après ce que j'ai lu VS2003 ou IIS sais gérer jusqu'a 1 delegate
je cherche donc comment parallélisé pour plus d'1 utilisateur,
Je n'ai pas trouvé d'exemple avec les threads ou je peux leur passer des parametres, les interrogés sur l'avancement ( simple lecture d'un variable(string par exemple) du thread ) ou récupéré une valeur (objet) de retour.
Arnaud CLERET a écrit :
Bonsoir,
Chacun des threads a accès à l'ensemble des ressources d'un même processus et la problmématique vient plus de la synchronisation des ressources comme l'a expliqué Patrick. Sinon on passera par Remoting ou WCF pour faire des échanges inter-process.
Pour connaitre l'état d'avancement des threads en cours de travail vous pouvez vous baser sur un mécanisme d'évènements lancer par les threads fils et capturés par le thread principal afin d'afficher les états au niveau de l'ihm.
Voila le fonctionnement de mon appli un peu plus détaillé : ( asp.net
web framework 1.1 )
depuis le main thread
un utilisateur lance une sorte de controle des données ( appui bouton
dans le navigateur web )
création d'un délégate (pour ne pas que la site soit gelé) qui
1 - récupére les données depuis la base (pendant ce temps je rafraichi
ma page web tous les x secondes en testant l'avancement du délégate
depuis une de ses méthodes )
2 - controles ces données (idem pour la page web)
3 - "construction d'un compte rendu" (idem pour la page web)
le délégate se termine en retournant le compte rendu,
retour dans le main thread et affichage du compte rendu......
l'utilisateur a le choix entre quitter ou lancer un second traitement (
différent du 1er )
si 2eme traitement, rebelotte
création d'un délégate en lui passant les infos en paramétres...
1 - traitement..... (.... page web)
etc....
cela focntionne bien avec 1 utilisateur car d'après ce que j'ai lu
VS2003 ou IIS sais gérer jusqu'a 1 delegate
je cherche donc comment parallélisé pour plus d'1 utilisateur,
Je n'ai pas trouvé d'exemple avec les threads ou je peux leur passer des
parametres, les interrogés sur l'avancement ( simple lecture d'un
variable(string par exemple) du thread ) ou récupéré une valeur (objet)
de retour.
Arnaud CLERET a écrit :
Bonsoir,
Chacun des threads a accès à l'ensemble des ressources d'un même processus
et la problmématique vient plus de la synchronisation des ressources comme
l'a expliqué Patrick. Sinon on passera par Remoting ou WCF pour faire des
échanges inter-process.
Pour connaitre l'état d'avancement des threads en cours de travail vous
pouvez vous baser sur un mécanisme d'évènements lancer par les threads fils
et capturés par le thread principal afin d'afficher les états au niveau de
l'ihm.
Voila le fonctionnement de mon appli un peu plus détaillé : ( asp.net web framework 1.1 )
depuis le main thread un utilisateur lance une sorte de controle des données ( appui bouton dans le navigateur web ) création d'un délégate (pour ne pas que la site soit gelé) qui 1 - récupére les données depuis la base (pendant ce temps je rafraichi ma page web tous les x secondes en testant l'avancement du délégate depuis une de ses méthodes ) 2 - controles ces données (idem pour la page web) 3 - "construction d'un compte rendu" (idem pour la page web) le délégate se termine en retournant le compte rendu, retour dans le main thread et affichage du compte rendu...... l'utilisateur a le choix entre quitter ou lancer un second traitement ( différent du 1er ) si 2eme traitement, rebelotte création d'un délégate en lui passant les infos en paramétres... 1 - traitement..... (.... page web) etc....
cela focntionne bien avec 1 utilisateur car d'après ce que j'ai lu VS2003 ou IIS sais gérer jusqu'a 1 delegate
je cherche donc comment parallélisé pour plus d'1 utilisateur,
Je n'ai pas trouvé d'exemple avec les threads ou je peux leur passer des parametres, les interrogés sur l'avancement ( simple lecture d'un variable(string par exemple) du thread ) ou récupéré une valeur (objet) de retour.
Arnaud CLERET a écrit :
Bonsoir,
Chacun des threads a accès à l'ensemble des ressources d'un même processus et la problmématique vient plus de la synchronisation des ressources comme l'a expliqué Patrick. Sinon on passera par Remoting ou WCF pour faire des échanges inter-process.
Pour connaitre l'état d'avancement des threads en cours de travail vous pouvez vous baser sur un mécanisme d'évènements lancer par les threads fils et capturés par le thread principal afin d'afficher les états au niveau de l'ihm.
Paul Bacelar
Pensez au delegate comme une méthode qui sera exécuté par un autre thread.
Une méthode simple utilisation de la Session.
Vous passez à votre Delegate un paramètre qui contiendra la session courante de la page.
Le delegate n'aura qu'à récupérer la session passée en paramètre et modifié une valeur enregistrée dans la session lors des différentes étapes et le code de la page n'aura qu'à lire la valeur dans la session pour connaître l'état d'avancement.
Il faut faire attention à interdire les écritures dans l'objet session durant les lecture dans ce même objets car le delegate et le code de la page peuvent être exécutés dans des threads différents.
Le mot clé C# "lock" est d'une grand utilité pour la sérialisation des accès aux objets. -- Paul Bacelar MVP VC++
"Oizo" wrote in message news:e5$
Voila le fonctionnement de mon appli un peu plus détaillé : ( asp.net web framework 1.1 )
depuis le main thread un utilisateur lance une sorte de controle des données ( appui bouton dans le navigateur web ) création d'un délégate (pour ne pas que la site soit gelé) qui 1 - récupére les données depuis la base (pendant ce temps je rafraichi ma page web tous les x secondes en testant l'avancement du délégate depuis une de ses méthodes ) 2 - controles ces données (idem pour la page web) 3 - "construction d'un compte rendu" (idem pour la page web) le délégate se termine en retournant le compte rendu, retour dans le main thread et affichage du compte rendu...... l'utilisateur a le choix entre quitter ou lancer un second traitement ( différent du 1er ) si 2eme traitement, rebelotte création d'un délégate en lui passant les infos en paramétres... 1 - traitement..... (.... page web) etc....
cela focntionne bien avec 1 utilisateur car d'après ce que j'ai lu VS2003 ou IIS sais gérer jusqu'a 1 delegate
je cherche donc comment parallélisé pour plus d'1 utilisateur,
Je n'ai pas trouvé d'exemple avec les threads ou je peux leur passer des parametres, les interrogés sur l'avancement ( simple lecture d'un variable(string par exemple) du thread ) ou récupéré une valeur (objet) de retour.
Arnaud CLERET a écrit :
Bonsoir,
Chacun des threads a accès à l'ensemble des ressources d'un même processus et la problmématique vient plus de la synchronisation des ressources comme l'a expliqué Patrick. Sinon on passera par Remoting ou WCF pour faire des échanges inter-process.
Pour connaitre l'état d'avancement des threads en cours de travail vous pouvez vous baser sur un mécanisme d'évènements lancer par les threads fils et capturés par le thread principal afin d'afficher les états au niveau de l'ihm.
Pensez au delegate comme une méthode qui sera exécuté par un autre thread.
Une méthode simple utilisation de la Session.
Vous passez à votre Delegate un paramètre qui contiendra la session courante
de la page.
Le delegate n'aura qu'à récupérer la session passée en paramètre et modifié
une valeur enregistrée dans la session lors des différentes étapes et le
code de la page n'aura qu'à lire la valeur dans la session pour connaître
l'état d'avancement.
Il faut faire attention à interdire les écritures dans l'objet session
durant les lecture dans ce même objets car le delegate et le code de la page
peuvent être exécutés dans des threads différents.
Le mot clé C# "lock" est d'une grand utilité pour la sérialisation des accès
aux objets.
--
Paul Bacelar
MVP VC++
"Oizo" <oizo@oizo> wrote in message
news:e5$k3o9kGHA.4044@TK2MSFTNGP03.phx.gbl...
Voila le fonctionnement de mon appli un peu plus détaillé : ( asp.net web
framework 1.1 )
depuis le main thread
un utilisateur lance une sorte de controle des données ( appui bouton dans
le navigateur web )
création d'un délégate (pour ne pas que la site soit gelé) qui
1 - récupére les données depuis la base (pendant ce temps je rafraichi ma
page web tous les x secondes en testant l'avancement du délégate depuis
une de ses méthodes )
2 - controles ces données (idem pour la page web)
3 - "construction d'un compte rendu" (idem pour la page web)
le délégate se termine en retournant le compte rendu,
retour dans le main thread et affichage du compte rendu......
l'utilisateur a le choix entre quitter ou lancer un second traitement (
différent du 1er )
si 2eme traitement, rebelotte
création d'un délégate en lui passant les infos en paramétres...
1 - traitement..... (.... page web)
etc....
cela focntionne bien avec 1 utilisateur car d'après ce que j'ai lu VS2003
ou IIS sais gérer jusqu'a 1 delegate
je cherche donc comment parallélisé pour plus d'1 utilisateur,
Je n'ai pas trouvé d'exemple avec les threads ou je peux leur passer des
parametres, les interrogés sur l'avancement ( simple lecture d'un
variable(string par exemple) du thread ) ou récupéré une valeur (objet) de
retour.
Arnaud CLERET a écrit :
Bonsoir,
Chacun des threads a accès à l'ensemble des ressources d'un même
processus et la problmématique vient plus de la synchronisation des
ressources comme l'a expliqué Patrick. Sinon on passera par Remoting ou
WCF pour faire des échanges inter-process.
Pour connaitre l'état d'avancement des threads en cours de travail vous
pouvez vous baser sur un mécanisme d'évènements lancer par les threads
fils et capturés par le thread principal afin d'afficher les états au
niveau de l'ihm.
Pensez au delegate comme une méthode qui sera exécuté par un autre thread.
Une méthode simple utilisation de la Session.
Vous passez à votre Delegate un paramètre qui contiendra la session courante de la page.
Le delegate n'aura qu'à récupérer la session passée en paramètre et modifié une valeur enregistrée dans la session lors des différentes étapes et le code de la page n'aura qu'à lire la valeur dans la session pour connaître l'état d'avancement.
Il faut faire attention à interdire les écritures dans l'objet session durant les lecture dans ce même objets car le delegate et le code de la page peuvent être exécutés dans des threads différents.
Le mot clé C# "lock" est d'une grand utilité pour la sérialisation des accès aux objets. -- Paul Bacelar MVP VC++
"Oizo" wrote in message news:e5$
Voila le fonctionnement de mon appli un peu plus détaillé : ( asp.net web framework 1.1 )
depuis le main thread un utilisateur lance une sorte de controle des données ( appui bouton dans le navigateur web ) création d'un délégate (pour ne pas que la site soit gelé) qui 1 - récupére les données depuis la base (pendant ce temps je rafraichi ma page web tous les x secondes en testant l'avancement du délégate depuis une de ses méthodes ) 2 - controles ces données (idem pour la page web) 3 - "construction d'un compte rendu" (idem pour la page web) le délégate se termine en retournant le compte rendu, retour dans le main thread et affichage du compte rendu...... l'utilisateur a le choix entre quitter ou lancer un second traitement ( différent du 1er ) si 2eme traitement, rebelotte création d'un délégate en lui passant les infos en paramétres... 1 - traitement..... (.... page web) etc....
cela focntionne bien avec 1 utilisateur car d'après ce que j'ai lu VS2003 ou IIS sais gérer jusqu'a 1 delegate
je cherche donc comment parallélisé pour plus d'1 utilisateur,
Je n'ai pas trouvé d'exemple avec les threads ou je peux leur passer des parametres, les interrogés sur l'avancement ( simple lecture d'un variable(string par exemple) du thread ) ou récupéré une valeur (objet) de retour.
Arnaud CLERET a écrit :
Bonsoir,
Chacun des threads a accès à l'ensemble des ressources d'un même processus et la problmématique vient plus de la synchronisation des ressources comme l'a expliqué Patrick. Sinon on passera par Remoting ou WCF pour faire des échanges inter-process.
Pour connaitre l'état d'avancement des threads en cours de travail vous pouvez vous baser sur un mécanisme d'évènements lancer par les threads fils et capturés par le thread principal afin d'afficher les états au niveau de l'ihm.