C# 多线程代理检查器

C# 多线程代理检查器,c#,.net,windows,webforms,webclient,C#,.net,Windows,Webforms,Webclient,我有一些代码,比如: using (WebClient wc = new WebClient()) { wc.Proxy = new WebProxy("IP", Port); resume: if (!wc.IsBusy) { string rtn_msg = string.Empty;

我有一些代码,比如:

            using (WebClient wc = new WebClient())
            {
                wc.Proxy = new WebProxy("IP", Port);

            resume:
                if (!wc.IsBusy)
                {
                    string rtn_msg = string.Empty;
                    try
                    {
                        rtn_msg = wc.DownloadString(new Uri("http://google.com/"));
                    }
                    catch (WebException) { }
                    catch (Exception) { }
                }
                else
                {
                    System.Threading.Thread.Sleep(1000);
                    goto resume;
                }
            }
我正在尝试将其用于ThreadPool:

        foreach (Proxy proxy in s)
        {
            ThreadPool.QueueUserWorkItem((c) =>
            {
                this.CheckProxy(proxy);
            });
        }
问题是列表中的最后一个代理被所有线程检查

例如,当代理列表中有ip1、ip2、ip3、ip4时,所有线程都会检查列表中的最后一项ip4


为什么呢?有什么建议吗?

如果你有像ReSharper这样的工具,它会警告你有权访问修改后的闭包。您需要制作本地副本:

    foreach (Proxy proxy in s)
    {
        var p = proxy;
        ThreadPool.QueueUserWorkItem((c) =>
        {
            this.CheckProxy(p);
        });
    }
此外,我建议将您的goto更改为while循环。后藤被认为是不好的做法,在你的情况下,你不会从中得到任何好处