Как распараллелить запрос на получение данных с веб ресурса?
Столкнулся с необходимостью распараллелить обращение к ресурсу для получения данных (в формате JSON) так как один запрос обрабатывается чуть больше секунды. Казалось бы мелочь, вот только таких запросов будет около 250 000.
Имеется массив строк PassResult. В каждой строке записана некоторая информация, необходимая для запроса. Я перебираю строки циклом, разбиваю их по разделам, нахожу нужную для запроса информацию и формирую URL. которая передается в функцию формирования и выдачи ответа NominatimReqRes(string url):
for (var line = 0; line < PassResult.Count; line++)
{
var SeparateLine = PassResult[line].Split('|');
dynamic JSON_str = JsonConvert.DeserializeObject(NominatimReqRes(
"https://4example?" +
"street=" + HttpUtility.UrlEncode(SeparateLine[6]) + " " + HttpUtility.UrlEncode(SeparateLine[7]) +
"&city=" + HttpUtility.UrlEncode(SeparateLine[4]) +
"&county=" + HttpUtility.UrlEncode(SeparateLine[0]) +
"&format=jsonv2"
));
foreach (var item in JSON_str)
{
Result.Add($"{PassResult[line]}|{item.lat}|{item.lon}");
}
}
Функция формирования запроса и выдачи ответа NominatimReqRes (строковый url):
public static string NominatimReqRes(string url)
{
using (WebClient client = new WebClient())
{
client.Headers.Add("User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36");
Stream data = client.OpenRead(url);
StreamReader reader = new StreamReader(data);
var result = reader.ReadToEnd();
data.Close();
return result;
}
}
Подскажите пожалуйста, как лучше всего поступить в этой ситуации?