【发布时间】:2023-03-28 07:52:01
【问题描述】:
我的代码如下:
_req = new HttpRequestMessage(HttpMethod.Get, _uri);
_response = await _httpClient.SendAsync(_req, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);
var rawResponse = new byte[_maxContentLength];
using (var responseStream = await _response.Content.ReadAsStreamAsync().ConfigureAwait(false))
{
int read;
int offset = 0;
do
{
read = await responseStream.ReadAsync(rawResponse, 0, rawResponse.Length).ConfigureAwait(false);
html += Encoding.UTF8.GetString(rawResponse, 0, read);
offset += read;
if (offset > _maxContentLength)
{
return Error("Too big");
}
} while (read != 0);
}
“return Error()”是否足以释放流和套接字以获取下一个 url?
//编辑:
对于某些页面await responseStream.ReadAsync 挂起并且永远不会返回
【问题讨论】:
-
您还需要在响应周围加上 using()。这应该可以释放所有资源。
-
_response 被放置在另一个地方,因为它是类范围的变量
标签: c# asynchronous httprequest async-await dotnet-httpclient