Вы должны использовать метод GetStreamAsync
. Как указано в документации :
Эта операция не блокируется. Возвращенный объект Task завершится после прочтения заголовков ответа. Этот метод не читает и не буферизует тело ответа .
пример:
HttpClient httpClient = new HttpClient();
var requestUri = "http://url-to-resource.com";
var stream = await httpClient.GetStreamAsync(requestUri);
using (var fileStream = File.Create("outputFile.ext"))
{
await stream.CopyToAsync(fileStream);
}
Все остальные методы, такие как GetByteArrayAsync
или GetStringAsync
, будутбуферизуйте ответ и завершится после прочтения всего тела ответа.
Размер буфера по умолчанию, используемый CopyToAsync
, составляет 81920 байт, как объявлено _DefaultCopyBufferSize . Вы можете изменить его, используя перегрузку CopyToAsync(Stream, Int32)
.