Partage
  • Partager sur Facebook
  • Partager sur Twitter

La liste d'attente est vide C#

    13 septembre 2021 à 17:20:02

    Bonjour,

    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

    • Partager sur Facebook
    • Partager sur Twitter

    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.
    • Editeur
    • Markdown