在ASP.NET中使用异步操作时,如何消除HTTP请求之间的延迟?

vma*_*k99 6 c# dotnet-httpclient

我正在使用HttpClient将一个GET请求发送到while循环内的服务器

while (cycle < maxcycle)
{

    var searchParameters = new ASearchParameters
    {
        Page = cycle++,
        id = getid
    };

    var searchResponse = await Client.SearchAsync(searchParameters);

}
Run Code Online (Sandbox Code Playgroud)

并且SearchAsync包含

public async Task<AuctionResponse> SearchAsync()
{

    var uriString = "Contains a https url with parameters"
    var searchResponseMessage = await HttpClient.GetAsync(uriString);

    return await Deserialize<AuctionResponse>(searchResponseMessage);


}
Run Code Online (Sandbox Code Playgroud)

事情发生在每个请求之后,在下一个请求开始之前有一个延迟.你可以在提琴手的时间轴上看到这个,也可以在小提琴手中看到每个请求前都有"Tunnel To"example.com:443

在此输入图像描述

问题:为什么会有延迟以及如何删除它?

And*_*per 2

我看到这里正在发生两件事。首先,根据反序列化器的不同,可能需要一段时间才能将响应转换回对象。您可能需要计算该步骤的时间,看看这是否不是您花费的大部分时间。其次,SSL 握手(“隧道”的起源)确实需要往返才能建立 SSL 通道。我认为 HttpClient 默认发送一个 Keep-Alive 标头,但您可能想看看它是 A) 未发送还是 B) 被拒绝。如果您为每个请求重新建立 SSL 通道,那么这本身很容易就会花费一百毫秒的时间(取决于服务器/网络负载)。

如果您使用 Fiddler,则可以启用检查 SSL 流量的功能,以查看实际的请求/响应标头是什么。