1

我不确定为什么会出现“并非所有代码路径都返回值”错误(请参阅下面的注释代码)。是不是因为 foreach 循环被认为不是一条路径而是多条路径,并且迭代可能不会返回值而循环会继续?

[顺便说一句,我的目标是处理 10 万个 url,创建许多 Web 请求,以便它们同时处于活动状态,并且能够在更新 UI 时捕获每个 url 的状态(活动、移动、超时),因为一组 url 正在使用有关到目前为止发现的错误 url 数量和到目前为止处理的数量或 url 的实时信息进行处理。我已经尝试使用 Parallel.ForEach 方法处理同步 Web 请求,但 UI 变得无响应。]

如果 Rows.Count == 0,则编辑为包含测试。

  public async Task<UrlInfo> ProcessUrls(DataTable urls)
    {


     if (urls.Rows.Count == 0)
        {
            return new UrlInfo();
        }
        else

      {


        foreach (DataRow r in urls.Rows)
        {

            UrlInfo info = new UrlInfo()
                {
                    Url = (string)r["url"],
                    status = UrlStatusCode.untested,
                    articleid = (int)r["articleid"]
                };

               return await Foo(info);                  
         }

     }
        //return new UrlInfo();  // error unless this line is uncommented
    }



      public async Task<UrlInfo> Foo(UrlInfo info) {

        <snip>
      }
4

1 回答 1

2

编译器抱怨urls.Rows不包含任何元素的情况。在这种情况下,该方法将永远不会遇到return语句。

在旁注中,我不认为这种方法意味着你认为它意味着什么。一个方法只返回一次,所以它只会处理第一个 url。

于 2013-08-03T15:58:15.860 回答