Exécuter une fonction sans attendre qu'elle se termine [Résolu]

Signaler
Messages postés
12
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2010
-
Messages postés
12
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2010
-
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

Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
6
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.
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
61
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)
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
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]
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
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
Messages postés
12
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2010

Merci je vais me renseigner sur les fonctions asynchrones de lecture/écriture.

je n'en avait pas entendu parlé.

Encore merci

MobyWan