Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 16438|Svare: 0

[WinForm] C# flertrådet utvikling

[Kopier lenke]
Publisert på 11.12.2019 12:08:45 | | |
Oppgaven som skal gjøres er å laste ned nesten 40 000 lydstykker fra Alibaba Cloud til lokalområdet, og én enkelt nedlasting er veldig treg, så jeg vil bruke multitråding og tildele 20 tråder til nedlasting samtidig, noe som sparer mye tid
          Klasseprogram
    {

        statisk void Main(string[] args) {
            streng sql = "velg 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);
            Stoppeklokke = ny stoppeklokke();
            Stoppeklokke. Start();
            ThreadStart(sList);
            WaitHandle.WaitAll(waits);  Alle tråder i lytte-venten er satt før de kan kjøre følgende kode, ellers vil de vente her
            Stoppeklokke. Stop();
            Console.WriteLine($"Time-uping{stopclock. ElapsedMilliseconds}milliseconds");
            Console.ReadKey();


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

            }
                 Tildel data til hver tråd for å kjøre og starte kjøringen
            for (int i = 0; Jeg < 20; i++)
            {
                hvis (i== tråder. Lengde-1) {
                    var retult = nums. Skip(nums. Tell / 20 * i). Take(nums. Tell-nums. Count / 20*i). ToList();
                    tråder[i]. Start(ny Objpt()
                    {
                        sList = retult,
                        WaitHandle = waits[i],
                        ThreadIndex = i
                    });
                }
                ellers {
                  var retult= nums. Skip(nums. Tell / 20 * i). Take(nums. Tell / 20). ToList();
                    tråder[i]. Start(new Objpt() {
                     sList= retult,
                     WaitHandle=waits[i],
                     ThreadIndex=i
                    });
                }

            }
        }

        offentlig statisk void DownLoadFile(Objekt obj)
        {
            int-tall = 0;
            Objpt optObj = (obj som Objpt);
            var sList = optObj.sList;
            Console.WriteLine($"Thread{optObj.ThreadIndex} startet";
            foreach (var url i sList)
            {
                Prøv
                {
                    tell++;
                    var arrs = URL. Split('/');
                    WebRequest-forespørsel = WebRequest.Create(url);
                    HttpWebResponse res = (HttpWebResponse)forespørsel. GetResponse();
                    WebResponse svar = forespørsel. GetResponse();           
                    hvis (Res. StatusCode.ToString() == "OK")
                    {
                        Stream responseStream = respons. GetResponseStream();
                        using (FileStream fsWrite = ny FileStream($"F:/Audio/v4/{arrs[arrs. Lengde - 2]}/{arrs[arrs. Lengde - 1]}", FileMode.OpenOrCreate, FileAccess.Write))
                        {
                            byte[] buffer = ny byte[response. InnholdLengde];
                            mens (Sant)
                            {
                                Returnerer antall byte som faktisk leses denne gangen
                                int r = responseStream.Read(buffer, 0, buffer. Lengde);
                                hvis (r == 0)
                                {
                                    pause;
                                }
                                fsWrite.Write(buffer, 0, r); skriv

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

                }
                catch (Unntak f.eks.)
                {
                    streng 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. Melding;
                    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} avsluttes");
            (optObj.WaitHandle som AutoResetEvent). Set();  Mengdemetoden er å markere når en tråd avsluttes
        }
    }

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

    }





Foregående:net/c# Hvordan implementere DNS-kapring
Neste:Bruk av DateTime
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com