C# C任务同步
我正在尝试使用多线程设计构建代理检查器,proxyList是“string[]”类型的变量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可能根据时间的不同而具有来自稍后循环迭代的值
我的问题是,如果检查需要很多时间,那么我传递给函数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";
});
}
});
}
}