Bonjour,
Ca me tarabuste car je me dis que ça doit être simplifiable mais je cale, j'essaie de faire de l'async mais comme je débute...
Cahier des charges, je lance une fonction quipeut prendre du temps, elle liste le contenu de répertoires surveillés, j'ai opté pour lancer des tâches en asynchrone pour gagner du temps (ce qui fonctionne bien avec ce code).
J'ai besoin d'attendre le résultat de ces tâches afin de lancer un processus commun de traitement par la suite et d'affecter le contenu dans une liste de classe etc... Si je colle le résult dans la première boucle, même avec un await ça attend, j'ai mis un chrono, plus des affichages, on voit bien que c'est dans l'ordre. J'ai un peu tripatouiller dans tous les sens, sans pour autant trouver au final une syntaxe efficace mais plus simple, je suis sur d'avoir lu à un moment une autre façon de faire mais je ne retrouve plus mes sources (je ne parle pas de convertir en Task.Run directement mais plutot de ne pas passer par deux boucles)
Désolé j'espère ne pas abuser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 var arrayTask = new Task<List<WatchedFile>>[listeDirs.Count]; for (int i=0; i < listeDirs.Count; i++) { string dir = listeDirs[i]; Task<List<WatchedFile>> t = new Task<List<WatchedFile>>(() => MakeListeDir(dir) ); arrayTask[i] = t; t.Start(); } for( int i =0; i < listeDirs.Count; i++ ) { arrayTask[i].Wait(); newListe[i].ListeFichiers = arrayTask[i].Result; }
Merci.
Partager