I-Task.WaitAll kusiphathi sokuchofoza se-WinForms ivimba iwindi ngisho noma ukuhlolwa ngokwako kusebenzisa i-HTTP engahambisani. Intambo ye-UI ayikwazi ukucubungula imiyalezo, futhi ama-continuation abanjiwe angase adinge leyo ntambo evinjiwe.

Ku-.NET 6 noma ngemuva kwalokho, linda iqembu elinomkhawulo esikhundleni salokho:

private async void checkButton_Click(object sender, EventArgs e)
{
    checkButton.Enabled = false;
    try
    {
        var entries = proxyList.Lines
            .Where(line => !string.IsNullOrWhiteSpace(line));
        foreach (var batch in entries.Chunk(8))
        {
            var results = await Task.WhenAll(batch.Select(CheckProxyAsync));
            ShowResults(results);
        }
    }
    catch (Exception error)
    {
        ShowCheckError(error);
    }
    finally
    {
        checkButton.Enabled = true;
    }
}

Lokhu kungokwefomu elikhona eline-System.Linq ne-System.Threading.Tasks etholakalayo. I-CheckProxyAsync yenza ukufaka nokukhipha okungahambisani okunomkhawulo futhi ibuyisela umphumela owodwa; ayilawuli izilawuli zisuka kuntambo yangemuva. I-ShowResults ne-ShowCheckError izindlela ze-application.

I-continuation evamile ye-await ibuyela kumongo we-UI lapho isiphathi saqala khona, ngakho i-ShowResults ingavuselela izilawuli. Ikhodi esebenza ngokusobala kwelinye intambo kufanele idlulise ukufinyelela kwezilawuli ngomshini we-WinForms osekelwe.

Uhlu lwe-proxy lwamahhala lungahlinzeka ngamakheli okufaka; dlulisa izivumelwano ezisetshenziswa yi-CheckProxyAsync kuphela. Isishiyagalombili yisabelomali sesibonelo. Iqembu elilandelayo lilinda ukuhlolwa okunensayo kakhulu eqenjini lamanje, lishintsha i-throughput ethile ngokwakhiwa kwemisebenzi okunomkhawulo. Gcina izikhathi zokugcina zokuhlolwa ngakunye kanye nokukhansela ku-CheckProxyAsync; ukulinda iqembu akukwazi ukwenza umsebenzi wenethiwekhi ongenamkhawulo uqede.

Izihloko ezihlobene