LenovoLegionToolkit

Форк
0
29 строк · 1.2 Кб
1
using System;
2
using System.IO;
3
using System.Net.Http;
4
using System.Threading;
5
using System.Threading.Tasks;
6

7
namespace LenovoLegionToolkit.Lib.Extensions;
8

9
public static class HttpClientExtensions
10
{
11
    public static async Task DownloadAsync(this HttpClient client, string requestUri, Stream destination, IProgress<float>? progress = null, CancellationToken cancellationToken = default)
12
    {
13
        using var response = await client.GetAsync(requestUri, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
14
        var contentLength = response.Content.Headers.ContentLength;
15

16
        await using var download = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
17

18
        if (progress is null || !contentLength.HasValue)
19
        {
20
            await download.CopyToAsync(destination, cancellationToken).ConfigureAwait(false);
21
            return;
22
        }
23

24
        progress.Report(0);
25
        var relativeProgress = new Progress<long>(totalBytes => progress.Report((float)totalBytes / contentLength.Value));
26
        await download.CopyToAsync(destination, 81920, relativeProgress, cancellationToken).ConfigureAwait(false);
27
        progress.Report(1);
28
    }
29
}
30

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.