Есть один чудный сайт, скрипт поиска которого ищет данные только за один день.
Написал программку которая автоматизирует процесс, но оказалась есть очень большая проблема. Если одновременное количество сессий с одного ip превышает некоторое количество сервер начинает возвращать 503.
1. Как ограничить одновременное количество выполняемых тасков?
2. При выполнении
Task.WhenAll(tasks.ToArray()); блокируется ui-поток,и форма заглушка-информатор которую я показываю на время поиска нормально не отрисовывается.
Как бороться с блокировкой, хочется на время поиска показывать нормальный информатор.
public static async Task ProcessUrlLawAsync(String Урл)
{
try
{
using (var webClient = new WebClient())
{
string data = await webClient.DownloadStringTaskAsync(new Uri(Урл));
// run checks here..
Парсинг(data);
}
}
catch (Exception ex)
{
//Catch my error here and handle it (display message box)
log.Error("Не удалось скачать ссылку="+Урл, ex);
}
}
private async void button1_Click(object sender, EventArgs e)
{
var tasks = new List<Task>();
for (DateTime date = полеДатаС.Value.Date; date.Date <= полеДатаПо.Value.Date; date = date.AddDays(1))
{
foreach(var текСтрока in СписокУрл)
{
Task fooWrappedInTask = Task.Run(() => ProcessUrlLawAsync(текСтрока) );
tasks.Add(fooWrappedInTask);
}
}
await Task.WhenAll(tasks.ToArray());
}