Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 16438|Svar: 0

[WinForm] C# multitrådet udvikling

[Kopier link]
Opslået på 11/12/2019 12.08.45 | | |
Forretningen, der skal udføres, er at downloade næsten 40.000 lydstykker fra Alibaba Cloud til lokalområdet, og en enkelt download er meget langsom, så jeg vil bruge multitrådning og tildele 20 tråde til download samtidig, hvilket sparer meget tid
          klasseprogram
    {

        statisk void Main(string[] args) {
            streng sql = "vælg en_audio,us_audio fra t_audio LIMIT 198 ";
            MySqlDataReader mySqlDataReader = DBHelper.ExecuteReader(sql);         
            List<String> sList = ny List<String>();
            sList.Add("https://qutifen-qudao.oss-cn-beijing.aliyuncs.com/mfg/audio/v3/1abacus_en.ogg");
            sList.Add("https://qutifen-qudao.oss-cn-beijing.aliyuncs.com/mfg/audio/v3/2abacus_en.ogg");
            hvis (mySqlDataReader.HasRows)
            {
                mens (mySqlDataReader.Read())
                {                 
                    sList.Add(mySqlDataReader.GetString(0));
                    sList.Add(mySqlDataReader.GetString(1));
                }
            }              
            Console.WriteLine(sList.Count);
            Stopur stopur = nyt stopur();
            Stopur. Start();
            ThreadStart(sList);
            WaitHandle.WaitAll(waits);  Alle tråde i listen wait er sat før den følgende kode kan eksekveres, ellers vil de vente her
            Stopur. Stop();
            Console.WriteLine($"Time-uping{stopwatch. ElapsedMilliseconds}milliseconds");
            Console.ReadKey();


        }
       statisk Tråd[] tråde = ny Tråd[20];
        statisk WaitHandle[] waits = ny WaitHandle[20];
        offentlig statisk void ThreadStart(List<String> nums) {
                  Tildel tråde
            for (int i=0; i<20; i++) {
                threads[i] = ny tråd(DownLoadFile);
                waits[i] = ny AutoResetEvent(falsk);

            }
                 Tildel data til hver tråd for at udføre og starte eksekveringen
            for (int i = 0; Jeg < 20; i++)
            {
                hvis (i== tråde. Længde-1) {
                    var retult = nums. Skip(nums. Tæl / 20 * i). Tag(nums. Tæl-nums. Count / 20*i). ToList();
                    tråde[i]. Start(ny Objpt()
                    {
                        sList = retult,
                        WaitHandle = waits[i],
                        ThreadIndex = i
                    });
                }
                ellers {
                  var retult= nums. Skip(nums. Tæl / 20 * i). Tag(nums. Tæl / 20). ToList();
                    tråde[i]. Start(new Objpt() {
                     sList= retult,
                     WaitHandle=waits[i],
                     ThreadIndex=i
                    });
                }

            }
        }

        offentlig statisk void DownLoadFile(Objekt obj)
        {
            Int count = 0;
            Objpt optObj = (obj som Objpt);
            var sList = optObj.sList;
            Console.WriteLine($"Thread{optObj.ThreadIndex} startede";
            foreach (var url i sList)
            {
                Prøv
                {
                    tæl++;
                    var arrs = URL. Split('/');
                    WebRequest-anmodning = WebRequest.Create(url);
                    HttpWebResponse res = (HttpWebResponse)-anmodning. GetResponse();
                    WebResponse svar = anmodning. GetResponse();           
                    hvis (res. StatusCode.ToString() == "OK")
                    {
                        Stream responseStream = response. GetResponseStream();
                        using (FileStream fsWrite = ny FileStream($"F:/Audio/v4/{arrs[arrs. Længde - 2]}/{arrs[arrs. Længde - 1]}", FileMode.OpenOrCreate, FileAccess.Write))
                        {
                            byte[] buffer = ny byte[response. IndholdLængde];
                            mens (sand)
                            {
                                Returnerer antallet af bytes, der faktisk blev læst denne gang
                                int r = responseStream.Read(buffer, 0, buffer. Længde);
                                hvis (r == 0)
                                {
                                    pause;
                                }
                                fsWrite.Write(buffer, 0, r); Skriv

                            }
                        }
                    }
                    hvis (count % 20 == 0 || count == sList.Count)
                    //{
                    Console.WriteLine($"Thread{optObj.ThreadIndex} processed:{count}");
                    //}

                }
                catch (Undtagelse f.eks.)
                {
                    string strErrorLogFile = System.AppDomain.CurrentDomain.BaseDirectory + $"\\{optObj.ThreadIndex}ErrorLog.log";
                    hvis (! System.IO.File.Exists(strErrorLogFile))
                        System.IO.File.WriteAllText(strErrorLogFile, "//System ErrorLog File\r\n");
                    object objSql = "thread" + optObj.ThreadIndex.ToString() + ex. Besked;
                    System.IO.File.AppendAllText(strErrorLogFile, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\t" + objSql.ToString() + url + "\r\n");

                }

            }
            Console.WriteLine($"Thread{optObj.ThreadIndex} slutter");
            (optObj.WaitHandle som AutoResetEvent). Set();  Sætmetoden er at markere, når en tråd slutter
        }
    }

     public class Objpt {
        public List<String> sList { get; sat; }
        public WaitHandle WaitHandle { get; sat; }
        public int ThreadIndex { get; sat; }

    }





Tidligere:net/c# Sådan implementerer man DNS-kapring
Næste:Brug af DateTime
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com