.NET 4.x Многопоточная отправка запросов - C#

Узнай цену своей работы

Формулировка задачи:

Народ подскажите как реализовать многопоточную отправку запросов) Вот код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Threading;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Thread[] threads = new Thread[10];
            
            for (int i = 0; i < 10; i++)
            {
                Thread t = new Thread(new ThreadStart(DoTransactions));
                threads[i] = t;
            }
            for (int i = 0; i < 10; i++)
            {
                threads[i].Start();
            }
        }
 
        string strNewValue;
        string strResponse;
        int zzz = 0;
        
        public void DoTransactions()
        {

                string[] ID = "".Split();
                richTextBox1.Invoke(new EventHandler(delegate { ID = richTextBox1.Text.Split('\n'); }));
                string[] Auth_ID;
                string ids = "555";

                lock (this)
                {
 
                for (int i = 0; i < ID.Length; i++)
                {
                    Auth_ID = ID[i].Split(':');
 
                    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("........");
                    req.Proxy = new WebProxy("127.0.0.1", 8888);
                    // Set values for the request back
                    req.Method = "POST";
                    req.ContentType = "application/x-www-form-urlencoded";
                    strNewValue = "...."+Auth_ID[0]+"....."+Auth_ID[1];
                    req.ContentLength = strNewValue.Length;
                    // Write the request
                    StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
                    stOut.Write(strNewValue);
                    stOut.Close();
                    // Do the request to get the response
                    StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());
                    strResponse = stIn.ReadToEnd();
 
                    stIn.Close();
 
                }
            }
        }

    }
}
все равно медленно...(((

Решение задачи: «.NET 4.x Многопоточная отправка запросов»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading;
 
namespace ConsoleApplicationTest {
    static class Program {
        static void Main( string[] args ) {
            var urls = new[] {
                "http://wikipedia.org",
                "http://msdn.microsoft.com",
                "http://www.cyberforum.ru"
            };
 
            // Состояния асинхронных операций.
            var asyncResults = new List<IAsyncResult>();
 
            foreach ( string uri in urls ) {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create( uri );
                var asyncResult = req.BeginGetResponse( null, req );
                Console.WriteLine( "Запрос отправлен на " + uri );
                asyncResults.Add( asyncResult );
                
            }
 
            // Ждём завершения всех запросов.
            WaitHandle.WaitAll( asyncResults.Select(result => result.AsyncWaitHandle).ToArray() );
 
            // Получаем ответы
            var responses = new List<string>();
            foreach ( IAsyncResult asyncResult in asyncResults ) {
                HttpWebRequest request = (HttpWebRequest) asyncResult.AsyncState;
 
                using ( var response = request.EndGetResponse( asyncResult ) ) {
                    using ( var reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII ) ) {
                        responses.Add( reader.ReadToEnd() );
                    }
                }
                asyncResult.AsyncWaitHandle.Close();
                Console.WriteLine( "Ответ получен от "+ request.RequestUri );
            }
 
            foreach ( string response in responses ) {
                Console.WriteLine( response );
            }
 
            Console.ReadKey();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.417 из 5
Похожие ответы