Foreach循环和错误,并非所有代码路径都返回一个值:async-await issue?

时间:2013-08-03 15:46:11

标签: c# async-await c#-5.0

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

[顺便说一句,我的目标是处理100K网址,创建许多网络请求,以便它们同时处于活动状态,并且能够捕获每个网址的状态(活动,移动,超时),同时将UI更新为一组正在处理网址,其中包含迄今为止发现的不良网址数量以及目前已处理的网址数量的实时信息。我尝试过使用同步Web请求的Parallel.ForEach方法,但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>
      }

1 个答案:

答案 0 :(得分:2)

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

另一方面,我不认为这种方法意味着你的意思。方法只返回一次,因此它只处理第一个URL。