J'essaie de lancer plusieurs requêtes en même temps avec un proxy. Je veux qu'un proxy lance une requête à la fois, c'est pourquoi j'ai une fonction gethandlerindexed
Aussi, l'erreur survient lors du dernier appel à gethandlerindexed , ici max = 2, donc j'ai bien 2 proxy, 2 user agents mais ça fonctionne pas. L'erreur en question est: la liste d'attente est vide.
Je comprend pas d'où peut venir cette erreur. Si une âme charitable passe par là...
private static readonly string PATH = @Directory.GetCurrentDirectory();
private static readonly string PATH_IMAGES = @Directory.GetCurrentDirectory() + "\\pct\\";
int indext = 0;
private async Task DoDownload(IEnumerable<ClearanceHandler> handlers, SemaphoreSlim sem, string url)
{
await Task.Delay(100);
try
{
await sem.WaitAsync();
indext++;
var client = new HttpClient(gethandlerindexed(indext, handlers));
string link_image = null;
using (HttpResponseMessage response = await client.GetAsync(url))
{
using (HttpContent content = response.Content)
{
link_image = await content.ReadAsStringAsync();
richTextBox1.TextInvoke(link_image);
}
}
}
finally
{
sem.Release();
}
}
private void Form1_Load(object sender, EventArgs e)
{
ServicePointManager.DefaultConnectionLimit = 10;
}
ClearanceHandler gethandlerindexed(int nb, IEnumerable<ClearanceHandler> handlers)
{
return (handlers.ElementAt(nb % handlers.Count()));
}
Queue<string> getdatafromfile(string path)
{
Queue<string> q = new Queue<string>();
var proxies = File.ReadAllLines(path);
for (int i = 0; i < 2; i++)
q.Enqueue(proxies[i]);
return (q);
}
private async void button1_Click(object sender, EventArgs e)
{
var proxies = getdatafromfile(PATH + "\\proxy\\proxy.txt");
var useragents = getdatafromfile(PATH + "\\proxy\\user-agents.txt");
//MessageBox.Show(proxies.Count() + " / " + useragents.Count());
var max = proxies.Count();
var handlers = Enumerable.Range(0, max).Select(_ => new ClearanceHandler(proxies.Dequeue()) { UserAgent = useragents.Dequeue(), MaxTimeout = 6000 });
var semaphore = new SemaphoreSlim(max, max);
await Task.Run(async () =>
{
var downloads = Enumerable.Range(0, max).Select((_ => "http://google.com")).ToArray();
var tasks = downloads.Select(dl => DoDownload(handlers, semaphore, dl));
await Task.WhenAll(tasks);
});
}
Merci
La liste d'attente est vide C#
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.