Task.WaitAll ann an làimhsichear cliog WinForms a' blocadh na h-uinneige eadhon nuair a bhios na sgrùdaidhean fhèin a' cleachdadh HTTP neo-shioncronaich. Chan urrainn do snìomh an UI teachdaireachdan a phròiseasadh, agus dh'fhaodadh gum bi feum aig na leanmhainnean glacte air an aon snìomh blocaichte.

Airson .NET 6 no nas ùire, feith ri baga cuibhrichte na àite:

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;
    }
}

Buineas seo do fhoirm a th' ann mar-thà le System.Linq agus System.Threading.Tasks rim faighinn. Bidh CheckProxyAsync a' dèanamh I/O neo-shioncronaich cuibhrichte agus a' tilleadh aon toradh; chan eil e a' làimhseachadh smachdan bho shnìomh cùla. 'S e dòighean aplacaid a th' ann an ShowResults agus ShowCheckError.

Tillidh leanmhainn àbhaisteach await dhan cho-theacsa UI far an do thòisich an làimhsichear, agus mar sin 's urrainn do ShowResults smachdan ùrachadh. Feumaidh còd a tha a' ruith gu soilleir air snìomh eile cead-smachd a chuir tron mheicearrachd WinForms a tha a' faighinn taic.

Faodaidh an liosta progsaidh an-asgaidh seòlaidhean cuir-a-steach a thoirt seachad; na cuir ach pròtacalan a chuireas CheckProxyAsync an gnìomh. 'S e ochd buidseat eisimpleireach. Feithidh an ath bhaga ris an sgrùdadh as moille sa bhaga làithreach, a' malairt cuid de throcadh airson cruthachadh ghnìomhan cuibhrichte. Cùm cinn-latha gach sgrùdaidh agus an cur à bith ann an CheckProxyAsync; chan urrainn do bhith a' feitheamh ri baga toirt air obrachadh lìonra neo-chuibhrichte crìochnachadh.

Artaigilean co-cheangailte