Új hozzászólás Aktív témák

  • Szabesz

    őstag

    válasz togvau #7814 üzenetére

    Azért írtam Parallel-lel, mert láthatóan valamit háttérben akartál csinálni, amit nem vártál be (Task.Factory await vagy bármi egyéb nélkül (aminek következtében az utolsó néhány unzip eredménye hibás lesz, vagy egy szép 0 byte-os file)). De akkor legyen egyszálas, ServicePointManager.DefaultConnectionLimit állítás nélkül:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading;

    namespace ConsoleApp1
    {
    class Program
    {
    static void Main(string[] args)
    {
    //ServicePointManager.DefaultConnectionLimit = int.MaxValue;

    var files = new[]
    {
    new Uri("http://ipv4.download.thinkbroadband.com/10MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com:81/10MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com:8080/10MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com/10MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com:81/20MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com:8080/20MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com/50MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com:81/50MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com:8080/50MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com/100MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com:81/100MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com:8080/100MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com/200MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com:81/200MB.zip"),
    new Uri("http://ipv4.download.thinkbroadband.com:8080/200MB.zip")
    };

    Console.WriteLine("Start");
    foreach(var file in files)
    {
    var tempFile = Path.GetTempFileName();
    using (var wc = new WebClient())
    {
    Console.WriteLine($"Starting download: {file} to {tempFile}...");
    wc.DownloadFile(file, tempFile);
    Console.WriteLine($"End download: {file}, local path: {tempFile}");
    }
    //File.Delete(tempFile);
    }
    Console.WriteLine("End");
    }
    }
    }

    Ez nálam szintén folyamatosan tölt, nem malmoz két letöltés között.

    A probléma eredete valószínűleg az, hogy kapcsolatokat nyitsz, amiket nem, vagy nem megfelelően zársz le, így a connection limit betelik, és megvárja egynek a felszabadulását (esetünkben valószínűleg timeout-ját). De mivel még nem láttunk teljes (minta) forduló kódot elejétől a végéig, csak részleteket, így nehéz megmondani a pontos okokat. Csinálj egy egyszerű példát, amin előáll a probléma, és arra már egyszerűbb gyógyírt mondani.

    ¯\_(ツ)_/¯

Új hozzászólás Aktív témák