Ang Task.WaitAll sa isang WinForms click handler ay humaharang sa window kahit na ang mga pagsusuri mismo ay gumagamit ng asynchronous HTTP. Hindi maproseso ng UI thread ang mga mensahe, at ang mga nakuhang continuation ay maaaring mangailangan ng parehong naharang na thread.

Para sa .NET 6 o mas bago, hintayin ang isang batch na may hangganan sa halip:

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

Ito ay kabilang sa isang umiiral na form na may System.Linq at System.Threading.Tasks na magagamit. Ang CheckProxyAsync ay gumagawa ng bounded asynchronous input at output at nagbabalik ng isang resulta; hindi ito nagmamanipula ng mga control mula sa background thread. Ang ShowResults at ShowCheckError ay mga method ng application.

Ang normal na continuation ng await ay bumabalik sa UI context kung saan nagsimula ang handler, kaya maaaring i-update ng ShowResults ang mga control. Ang code na tahasang tumatakbo sa ibang thread ay dapat magpadala ng access sa control sa pamamagitan ng sinusuportahang mekanismo ng WinForms.

Ang listahan ng libreng proxy ay maaaring magbigay ng mga input address; ipasa lamang ang mga protocol na ipinapatupad ng CheckProxyAsync. Walo ay isang halimbawang badyet. Ang susunod na batch ay naghihintay sa pinakamabagal na pagsusuri sa kasalukuyang batch, na ipinagpapalit ang ilang throughput para sa bounded na paglikha ng task. Panatilihin ang mga deadline ng bawat pagsusuri at ang cancellation sa loob ng CheckProxyAsync; ang paghihintay sa isang batch ay hindi makapagpapatapos ng isang walang hanggang operasyon sa network.

Kaugnay na mga artikulo