c#任务同步
本文关键字:同步 任务 | 更新日期: 2023-09-27 18:01:59
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[]'的类型。
我的问题是,如果检查需要很多时间,我传递给函数checkProxyNonBlocking的x是否与我继续处理的x相同?
如果您正在使用c# 5(或更高版本)和foreach
循环,那么它应该按照您期望的方式工作,并且validTextBox.Text += x + "'n"
将具有该循环迭代的x
的正确值。但是,如果您使用c# 4或for
循环,那么您将获得不一致的结果,其中x
可能(取决于时间)具有来自稍后循环迭代的值。
要了解完整的解释,请阅读访问闭包警告中的foreach变量和关闭被认为有害的循环变量