Dakatar da toshewar WinForms yayin da ake gudanar da binciken proxy
Maye gurbin Task.WaitAll na daidaitacce a cikin mai sarrafa taron UI da jira, ɓangarorin iyaka, sannan sabunta sarrafawa a cikin mahallin UI da aka ci gaba.
Task.WaitAll a cikin mai sarrafa danna WinForms yana toshe taga ko da binciken da kansa na amfani da HTTP mara daidaito. Zaren UI ba zai iya sarrafa saƙonni ba, kuma ci gaba da aka kama na iya buƙatar wannan zaren da aka toshe.
Don .NET 6 ko fiye, jira ɓangaren iyaka a maimakon haka:
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;
}
}Wannan yana cikin sigar da ta wanzu tare da System.Linq da System.Threading.Tasks akwai. CheckProxyAsync yana yin I/O mara daidaito mai iyaka kuma yana dawo da sakamako ɗaya; ba ya sarrafa abubuwan sarrafawa daga zaren baya. ShowResults da ShowCheckError hanyoyin aikace-aikace ne.
Ci gaban await na yau da kullun yana komawa zuwa mahallin UI inda mai sarrafa ya fara, don haka ShowResults na iya sabunta sarrafawa. Kod ɗin da ke gudana a fili a wani zare dole ne ya tura damar sarrafawa ta hanyar hanyar WinForms da aka goyi bayan.
Jerin proxy kyauta na iya samar da adiresoshin shigarwa; wuce kaɗai ka'idojin da CheckProxyAsync ke aiwatarwa. Takwas misali ne na kasafin kuɗi. Ɓangare na gaba yana jiran bincike mafi jinkiri a ɓangaren yanzu, yana musanya ɗan kwarara don ƙirƙirar ayyuka mai iyaka. Riƙe ƙayyadaddun lokaci na kowane bincike da sokewa a cikin CheckProxyAsync; jiran ɓangare ba zai iya sa aikin cibiyar sadarwa mara iyaka ya ƙare ba.