Exécuter une fonction sans attendre qu'elle se termine

Résolu
cs_MobyWan Messages postés 12 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 4 septembre 2010 - 11 nov. 2007 à 17:35
cs_MobyWan Messages postés 12 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 4 septembre 2010 - 12 nov. 2007 à 21:31
Bonjour,

Je me demande si c'est possible en c#, au sein d'une méthode, d'en lancer une autre sans attendre qu'elle se finisse pour cloturer la méthode appelante. (Donc appelé une méthode X qui en appel un autre Y et X se termine immédiatement alors que Y continue son traitement). 

c'est pour utiliser dans un service qui rappatrie des données et je n'ai pas envie de devoir attendre la fin de l'écriture sur le disque car de nouveau paquets de données seront envoyer pendant ce temps là

j'aimerais aussi éviter de passer par un event mais si il n'y a pas d'autres solutions...

voila si quelqu'un a une idée, c'est assez pressé.

Merci d'avance!!!

MobyWan

5 réponses

cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
11 nov. 2007 à 20:33
Salut,


La technique de base pour appeler une méthode de façon asynchrone est
de faire appel à un thread. Maintenant, ça me paraît un peu lourd pour
faire une écriture sur le disque.


Il faudrait que tu précises un peu comment tu fais cela actuellement
car il existe des fonctions asynchrones de lecture/écriture en C#.
Elles sont généralement préfixées par Begin (BeginRead, BeginWrite).


Si tu veux ne pas perdre de temps à faire des lectures/écritures sur le
disque, il y a un moyen très simple aussi : traiter les données en bloc
dans la mémoire (c'est à dire mettre en cache) et solliciter le disque
le moins possible.


Décris plus précisément ce que tu souhaites faire et ce seras plus simple de te guider.


Cordialement.
3
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
12 nov. 2007 à 08:10
Hello,

Encore un détail, tu dis que tu veux éviter de passer par des events. En effet, il te faut l'éviter dans ton cas, car les events ne sont pas asynchrones. Ca ne te servirait donc strivtement à rien.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
12 nov. 2007 à 10:16
Sinon... il y a des sources là dessus sur csharpfr, dont celle-ci : http://www.csharpfr.com/codes/IMPLEMENTATION-PATTERN-ASYNCHRONOUS_41848.aspx

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
12 nov. 2007 à 18:23
Sinon le pool de threads du framework est assez simple à mettre en oeuvre, et fait pour ça.
Renseignes toi sur la méthode "ThreadPool.QueueUserWorkItem", elle devrait répondre à ton besoin.

Par contre attention à l'utilisation des threads, surtout si tu risque de te retrouver avec plusieurs threads manipulant une ressource commune (un fichier, un répertoire, etc.). Si tu es dans ce cas, j'aurai tendance moi aussi a te renvoyer sur la source de sebmafate (voir lien ci-dessus), même si tout de suite plus "lourd" a mettre en place.


Working as designed
www.nikoui.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MobyWan Messages postés 12 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 4 septembre 2010
12 nov. 2007 à 21:31
Merci je vais me renseigner sur les fonctions asynchrones de lecture/écriture.

je n'en avait pas entendu parlé.

Encore merci

MobyWan
0
Rejoignez-nous