Waqqaf milli Tbblokka WinForms waqt li jkunu qed jaħdmu l-verifiki tal-proxy
Issostitwixxi Task.WaitAll sinkroniku fil-handler tal-avveniment tal-UI b'baċċijiet limitati u mistennija, imbagħad aġġorna l-kontrolli fil-kuntest tal-UI li jerġa' jibda.
Task.WaitAll f'handler tal-klikk ta' WinForms jibblokka t-tieqa anki meta l-verifiki stess jużaw HTTP asinkroniku. Il-ħajta tal-UI ma tistax tipproċessa messaġġi, u l-continuations maqbuda jistgħu jkunu jeħtieġu dik il-ħajta blokkata stess.
Għal .NET 6 jew aktar tard, minflok stenna baċċa limitata:
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;
}
}Dan jaqa' f'formola eżistenti b'System.Linq u System.Threading.Tasks disponibbli. CheckProxyAsync tagħmel I/O asinkroniku limitat u tirritorna riżultat wieħed; ma timmanipulax il-kontrolli minn ħajta tal-isfond. ShowResults u ShowCheckError huma metodi tal-applikazzjoni.
Il-continuation normali ta' await tirritorna għall-kuntest tal-UI fejn beda l-handler, għalhekk ShowResults tista' taġġorna l-kontrolli. Kodiċi li jkun qed jaħdem b'mod espliċitu fuq ħajta oħra għandu jgħaddi l-aċċess għall-kontrolli permezz tal-mekkaniżmu tal-WinForms appoġġjat.
Il-lista tal-proxy b'xejn tista' tforni indirizzi tal-input; għaddi biss protokolli implimentati minn CheckProxyAsync. Tmienja hija baġit ta' eżempju. Il-baċċa li jmiss tistenna l-aktar verifika bil-mod fil-baċċa attwali, u tbiddel ftit throughput għal ħolqien limitat ta' kompiti. Żomm l-iskadenzi ta' kull verifika u l-kanċellazzjoni f'CheckProxyAsync; l-istennija ta' baċċa ma tistax tagħmel operazzjoni tan-network bla limitu tispiċċa.