Task.WaitAll WinForms klik-kudeatzaile batean leihoa blokeatzen du, egiaztapenek beriek HTTP asinkronoa erabiltzen dutenean ere. UI hariak ezin ditu mezuak prozesatu, eta harrapatutako jarraipenek hari blokeatu hori bera behar izan dezakete.

.NET 6 edo berriagoan, itxaron lote mugatu bat:

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

Hau lehendik dagoen formulario batean doa, System.Linq eta System.Threading.Tasks erabilgarri dituela. CheckProxyAsync I/O asinkrono mugatua egiten du eta emaitza bat itzultzen du; ez ditu kontrolak atzeko hari batetik manipulatzen. ShowResults eta ShowCheckError aplikazioaren metodoak dira.

await-ren jarraipen normala kudeatzailea hasi zen UI testuingurura itzultzen da, beraz ShowResults kontrolak egunera ditzake. Beste hari batean esplizituki exekutatzen den kodeak kontrolen sarbidea WinForms mekanismo onartuaren bidez bideratu behar du.

Doako proxy zerrendak sarrera helbideak eman ditzake; pasa CheckProxyAsync-ek inplementatzen dituen protokoloak soilik. Zortzi adibide-aurrekontua da. Hurrengo loteak uneko loteko egiaztapen geldoena itxaroten du, eta horrek errendimendu zati bat zereginen sorrera mugatuaren truke uzten du. Mantendu egiaztapen bakoitzaren epeak eta ezeztapena CheckProxyAsync barruan; lote bat itxaroteak ezin du sare-eragiketa mugagabe bat amaitutzat eman.

Erlazionatutako artikuluak