Как запустить несколько веб-клиентов одновременно?

Вот мой код

try
{
    for (int i = 0; i < RichTextbox2.Lines.Length; i++)
    {
        var length = urlwebapi.Lines.Length;
        {
            WebClient f = new WebClient();
            dynamic read = f.DownloadString(urlwebapi.Lines[(i % length)] + RichTextbox2.Lines[i]);
            JObject o = JObject.Parse(read);            
        }
    }
}
catch (WebException e)
{
    MessageBox.Show(e.Message);
}

MessageBox.Show("done");                 

Образец urlwebapi

http://example1.com/api.php?ex=
http://example2.com/api.php?ex=
http://example3.com/api.php?ex=
http://example4.com/api.php?ex=
http://example5.com/api.php?ex=

Код может одновременно запускаться только в urlwebapi. Как получить, когда код выполняется, а затем сразу запустить до 5 urlwebapi (example1.com до example5.com) одновременно

2 ответа

Вот пример кода, как это сделать:

public async Task<string[]> DownloadStringsAsync(string[] urls)
    {
        var tasks = new Task<string>[urls.Length];
        for(int i=0; i<tasks.Length; i++)
        {
            tasks[i] = DownloadStringAsync(urls[i]);
        }
        return await Task.WhenAll(tasks);
    }

    public async Task<string> DownloadStringAsync(string url)
    {
        //validate!
        using(var client = new WebClient())
        {
            //optionally process and return
            return await client.DownloadStringTaskAsync(url)
                .ConfigureAwait(false);
        }
    }

Я бы предпочел использовать HttpClient ( https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.118).aspx), но процесс в основном такой же

Предлагаю использовать httpClient. Это делает его прогулкой в ​​парке. И с помощью вы обращаетесь с утилизировать должным образом.

(Псевдо-код)

using (var client = new httpClient)
{
  //your logic, and you can keep using client in this context.
}
Другие вопросы по тегам