Я использую HttpClient для загрузки файлов в приложении C# (. NET Framework 4.6.1).
Проблема с кодом ниже состоит в том, что если соединение падает во время загрузки кода застрял в методе CopyToAsyn c.
У меня та же проблема, если я использую методы WebClient.DownloadFileAsyn c, но вместо этого я хотел бы использовать HttpClient.
public class DownloadManager
{
private readonly HttpClientHandler _handler;
private readonly HttpClient _client;
public DownloadManager()
{
_handler = new HttpClientHandler();
_client = new HttpClient(_handler);
}
public async Task Download(string url, string file, CancellationToken cancellationToken)
{
try
{
var response = await _client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
if (response.IsSuccessStatusCode)
{
using (var fileStream = new FileStream(file, FileMode.Create, FileAccess.Write))
{
var stream = await response.Content.ReadAsStreamAsync();
await stream.CopyToAsync(fileStream, 81920, cancellationToken);
}
}
}
catch (Exception ex)
{
if (cancellationToken.IsCancellationRequested)
{
throw new Exception("Download was cancelled");
}
throw ex;
}
}
}