【问题标题】:MultiThreaded Proxy Checker多线程代理检查器
【发布时间】:2011-06-04 08:28:52
【问题描述】:

我的代码很少:

            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,即列表中的最后一项。

这是为什么呢?关于如何让它发挥作用的任何建议?

【问题讨论】:

    标签: c# .net windows webforms webclient


    【解决方案1】:

    如果您有像 ReSharper 这样的工具,它会用Access to modified closure 警告您。您需要制作本地副本:

        foreach (Proxy proxy in s)
        {
            var p = proxy;
            ThreadPool.QueueUserWorkItem((c) =>
            {
                this.CheckProxy(p);
            });
        }
    

    我还建议将您的 goto 更改为 while 循环。 Goto 被认为是不好的做法,在您的情况下,您不会从中获得任何好处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      相关资源
      最近更新 更多