Как распараллелить запрос на получение данных с веб ресурса?

Столкнулся с необходимостью распараллелить обращение к ресурсу для получения данных (в формате 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;
    }
}

Подскажите пожалуйста, как лучше всего поступить в этой ситуации?


Ответы (0 шт):