[C#] Requêtes web simultanées avec X threads
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 :lol:
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:
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.