Bonjour.
J'ai une liste de pages web (disons 1 000 pour se donner une idée) et j'aimerais en récupérer le statut HTTP... le problème est que vu que la liste de pages est assez conséquente (1 000), je veux pouvoir utiliser plusieurs threads et donc faire plusieurs requêtes "en même temps" sans attendre le retour de la requête précédente.
J'aimerais aussi pouvoir indiquer un nombre maximum de threads pour pas griller ma bande passante
Je galère sur ce problème depuis quelques temps déjà, que ce soit avec les threads, les Task ou les async / await... je n'ai rien réussi
Pour le moment mon code ressemble à ça :
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
22
23
24
25
26 string[] urlz = XXX; List<Task> threadz = new List<Task>(); SemaphoreSlim throttler = new SemaphoreSlim(initialCount: 25); // nb max de threads foreach (string u in urlz) { await throttler.WaitAsync(); threadz.Add( Task.Run(async () => { try { resultat += await fonction(u); } finally { throttler.Release(); } })); } await Task.WhenAll(threadz); textboks.Text = resultat;
Avez-vous des suggestions ?
TLDR : Je veux faire un programme qui envoie des requêtes simultanées sur plusieurs pages web (mais jamais plus de X à la fois) et qui récupère les résultats.
Merci de vos réponses.
Partager