C#任务同步

时间:2015-07-09 18:56:28

标签: c# multithreading proxy task

 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相同?

1 个答案:

答案 0 :(得分:0)

如果您使用的是C#5(或更高版本)和foreach循环,那么它应该按您期望的方式工作,并且validTextBox.Text += x + "\n"将为该循环设置正确的x值迭代。但是,如果您使用的是C#4或for循环,则会得到不一致的结果,其中x可能(取决于时间)具有稍后循环迭代的值。

要获得完整说明,请阅读Access to foreach variable in closure warningClosing over the loop variable considered harmful