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

  • Szabesz

    őstag

    válasz togvau #7811 üzenetére

    Csináltam egy ConsoleApp példát:

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

    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");
    Parallel.ForEach(files, file =>
    {
    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 szépen kipörgeti amit a netem bírt, és párhuzamosan tölti le a minta fájlokat.

    Több gond van a bemásolt kódoddal (mindamellett, hogy a teljesen nem másoltad be, ezért az összkép sem lehet teljes a működésről, és vannak benne zavaros dolgok):
    - using-ot kellene használni
    - Task.Factory.StartNew pedig el van indítva, de sehol sincsen bevárva. Task.Run javallottabb, illetve az async-await kulcsszavak használata. De ha még nagyon új a C#, lehet hanyagolni kellene egyelőre.
    - A ConvertToStream környékén is valószínűleg voltak problémák, nem olyan triviális az átalakítás.
    - ServicePointManager.DefaultConnectionLimit értéke alapból 2, ha párhuzamos kérésekkel szeretnél dolgozni, érdemes átállítani.

    Másolj be egy teljes (működő, forduló) példát, hogy meg lehessen találni a pontos hibát. De valószínűnek tartom, hogy a fentiek egyikének hibás használata az okozó.

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