Ограничение скорости скачивания
csharp
public async Task DownloadWithThrottlingAsync(string url, string filePath, int maxBytesPerSecond)
{
    using var httpClient = new HttpClient();
    using var response = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
    await using var contentStream = await response.Content.ReadAsStreamAsync();
    await using var fileStream = new FileStream(filePath, FileMode.Create);
    
    var buffer = new byte[8192];
    var stopwatch = Stopwatch.StartNew();
    long totalBytesRead = 0;
    int bytesRead;
    
    while ((bytesRead = await contentStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
    {
        await fileStream.WriteAsync(buffer, 0, bytesRead);
        totalBytesRead += bytesRead;
        
        if (maxBytesPerSecond > 0)
        {
            var elapsed = stopwatch.Elapsed.TotalSeconds;
            var targetTime = (double)totalBytesRead / maxBytesPerSecond;
            
            if (elapsed < targetTime)
            {
                var delayTime = (targetTime - elapsed) * 1000;
                await Task.Delay(TimeSpan.FromMilliseconds(delayTime));
            }
        }
    }
}