Как запустить несколько веб-клиентов одновременно?
Вот мой код
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.
}