private void checkProxies()
{
foreach(string x in proxyList)
{
Task<bool> task = CheckProxy.CheckProxyNonBlocking(x);
Application.DoEvents();
task.ContinueWith((t) =>
{
if (!t.Result)
Application.DoEvents();
else
{
this.Invoke((MethodInvoker)delegate
{
validTextBox.Text += x + "\n";
});
}
});
}
}
我正在尝试使用多线程设计构建代理检查器,proxyList是'string []'类型的变量。
我的问题是,如果检查需要花费很多时间,那么x我传递给函数checkProxyNonBlocking是否与我正在处理的x相同?
答案 0 :(得分:0)
如果您使用的是C#5(或更高版本)和foreach
循环,那么它应该按您期望的方式工作,并且validTextBox.Text += x + "\n"
将为该循环设置正确的x
值迭代。但是,如果您使用的是C#4或for
循环,则会得到不一致的结果,其中x
可能(取决于时间)具有稍后循环迭代的值。
要获得完整说明,请阅读Access to foreach variable in closure warning和Closing over the loop variable considered harmful。