C# C任务同步

C# C任务同步,c#,multithreading,proxy,task,C#,Multithreading,Proxy,Task,我正在尝试使用多线程设计构建代理检查器,proxyList是“string[]”类型的变量 我的问题是,如果检查需要很多时间,那么我传递给函数checkProxyNonBlocking的x是否与我在“继续”中处理的x相同?如果您使用的是C 5或更高版本和foreach循环,那么它应该按照您期望的方式工作,并且validTextBox.Text+=x+\n对于该循环迭代将具有正确的x值。然而,如果您使用C4或for循环,那么您将得到不一致的结果,其中x可能根据时间的不同而具有来自稍后循环迭代的值

我正在尝试使用多线程设计构建代理检查器,proxyList是“string[]”类型的变量


我的问题是,如果检查需要很多时间,那么我传递给函数checkProxyNonBlocking的x是否与我在“继续”中处理的x相同?

如果您使用的是C 5或更高版本和foreach循环,那么它应该按照您期望的方式工作,并且validTextBox.Text+=x+\n对于该循环迭代将具有正确的x值。然而,如果您使用C4或for循环,那么您将得到不一致的结果,其中x可能根据时间的不同而具有来自稍后循环迭代的值


要获得完整的解释,请阅读并回答。

这些任务中只有2项真正得到执行,您知道为什么吗?看起来您并没有明确地等待任务完成。任务仍在运行时,您的应用程序或测试是否可能存在?是的,我只想在检查完成后将其添加到列表中。
 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";
                        });
                    }
                });
            }
        }