public static async Task<Stream> GetStreamRangeAsync(Uri uri, Range range)
 {
     using (var httpClient = new HttpClient())
     {
         if (range != null)
         {
             if (range.From.HasValue) httpClient.AddRange((long)range.From.Value, (long)range.To.Value);
             else if (range.To.HasValue) httpClient.AddRange((long)range.To.Value);
         }
         return (await httpClient.GetResponse(uri)).Stream;
     }
 }
 public static async Task<Stream> GetStreamRangeAsync(Uri uri, long range)
 {
     using (var httpClient = new HttpClient())
     {
         httpClient.AddRange(range);
         return (await httpClient.GetResponse(uri)).Stream;
     }
 }
 public static async Task<Stream> GetStreamRangeNoSuffixAsync(Uri uri, long range, long fileSize)
 {
     using (var httpClient = new HttpClient())
     {
         httpClient.AddRange(range);
         if (range < 0)
         { 
             return await GetStreamRangeAsync(uri, fileSize + range, fileSize);
         }
         else
         {
             return (await httpClient.GetResponse(uri)).Stream;
         }
     }
 }
 public static async Task<WebRequestorResponse> GetResponseAsync(Uri uri, long from, long to)
 {
     using (var httpClient = new HttpClient())
     {
         httpClient.AddRange(from, to);
         return await httpClient.GetResponse(uri);
     }
 }