Task.WaitAll nínú olùṣàkóso títẹ WinForms ń dina fèrèsé pàápàá nígbà tí àwọn ìṣàyẹ̀wò fúnra wọn ń lo HTTP asynchronous. Ẹ̀rọ UI kò lè ṣiṣẹ́ lórí àwọn ìfiránṣẹ́, àti àwọn continuation tí a mú gbà lè nílò ẹ̀rọ tí a dina yẹn.

Fún .NET 6 tàbí tí ó tẹ̀lé, dúró de ẹgbẹ́ tí ó ní ààlà ní ààlà rẹ̀:

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

Èyí wà nínú fọ́ọ̀mù tí ó ti wà pẹ̀lú System.Linq àti System.Threading.Tasks wà. CheckProxyAsync ń ṣe ìwọlé àti ìjáde asynchronous tí ó ní ààlà ó sì dá èsì kan padà; kò ṣàkóso àwọn control láti ẹ̀rọ ẹ̀yìn. ShowResults àti ShowCheckError jẹ́ àwọn ọ̀nà application.

Continuation déédé ti await ń padà sí UI context níbi tí olùṣàkóso ti bẹ̀rẹ̀, nítorí náà ShowResults lè ṣe àtúnṣe àwọn control. Kóòdù tí ń ṣiṣẹ́ kedere lórí ẹ̀rọ mìíràn gbọ́dọ̀ gbé àǹfààní control lọ nípasẹ̀ ẹ̀rọ WinForms tí a ṣe àtìlẹ́yìn fún.

Àkójọ proxy ọ̀fẹ́ lè pèsè àwọn àdírẹ́sì ìwọlé; fi àwọn protocol tí CheckProxyAsync ń ṣe nìkan ránṣẹ́. Mẹ́jọ jẹ́ ìsúná àpẹẹrẹ. Ẹgbẹ́ tí ó tẹ̀lé ń dúró de ìṣàyẹ̀wò tí ó lọ́ra jùlọ nínú ẹgbẹ́ lọ́wọ́lọ́wọ́, ó ń pààrọ̀ ìṣàn díẹ̀ fún ṣíṣe task tí ó ní ààlà. Tọ́jú àwọn àkókò ìparí ìṣàyẹ̀wò kọ̀ọ̀kan àti cancellation nínú CheckProxyAsync; dídúró de ẹgbẹ́ kò lè mú iṣẹ́ nẹ́tíwọ́kì tí kò ní ààlà parí.

Àwọn àpilẹ̀kọ tó jọra