Dẹkun Dídina WinForms Nígbà Tí Àwọn Ìṣàyẹ̀wò proxy Ń Ṣiṣẹ́
Rọ́pò Task.WaitAll synchronous nínú olùṣàkóso ìṣẹ̀lẹ̀ UI pẹ̀lú àwọn ẹgbẹ́ tí a ń dúró dè tí wọ́n ní ààlà, lẹ́yìn náà ṣe àtúnṣe àwọn control nínú UI context tí ó tún bẹ̀rẹ̀.
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í.