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#任务同步

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

要了解完整的解释,请阅读访问闭包警告中的foreach变量和关闭被认为有害的循环变量