在循环中发送请求时,httpclient 开始变慢

When sending requests in a loop, httpclient starts to be slowing

我有一个发送请求并解析响应的程序。我想做 1000 个请求。 10-15次请求后,Httpclient开始变慢,发一个请求慢10秒左右,然后越来越慢。示例代码:

class a5
{
    public static HttpClient client = new HttpClient();

    public async System.Threading.Tasks.Task main()
    {
        for (int page = 0; Position < 1000; page++)
        {
            //int totalpages = await frist1(link);
            string full_json = await post_all_pages(page, link);
            var jsons = JsonConvert.DeserializeObject<Json5>(full_json);
            // Далее парсинг данных...
        }
    }
    // запрос 
    private async System.Threading.Tasks.Task<string> post_all_pages(int page, string link)
    {
        var Other_Link = link.Substring(link.LastIndexOf("/") + 1, link.Length - (link.LastIndexOf("/") + 1));

        var jsonrequest = "{\"PageSize\":" + 25 + ",\"PageNumber\":" + page + ",\"OrderBy\":\"PriceAsc\",\"HotelId\":null}";
        var content = new StringContent(jsonrequest, Encoding.UTF8, "application/json");
        var html = await client.PostAsync("https://intourist.ru/search/api/TourSearch/" + Other_Link, content);
        Console.WriteLine("{\"PageSize\":" + 25 + ",\"PageNumber\":" + page + ",\"OrderBy\":\"PriceAsc\",\"HotelId\":null}");
        Console.WriteLine(html);
        return html.Content.ReadAsStringAsync().Result;
    }

List<Task<string>> alltasks = new List<Task<string>>();

for (int page = 0; Position < 1000; page++)
{
    //int totalpages = await frist1(link);
    Task<String> t =  post_all_pages(page, link);
    alltasks.add(t);
    //var jsons = JsonConvert.DeserializeObject<Json5>(full_json);
    // Далее парсинг данных...
}

Tasks.WaitAll(alltasks.ToArray());

您可能想要创建一个异步函数来调用 post_all_pages,然后等待结果,然后执行 JsonDeserialize

[编辑 2020 年 7 月 18 日] 使用 WhenAll 是更好的解决方案:

await Task.WhenAll(alltasks.ToArray());