Foreach循环和错误,即并非所有代码路径都返回值:async等待问题

本文关键字:路径 代码 返回值 问题 等待 async 错误 循环 Foreach | 更新日期: 2023-09-27 18:26:29

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

[BTW,我的目标是处理10万个url,创建许多web请求,使它们同时处于活动状态,并能够捕获每个url的状态(活动、移动、超时)同时在利用关于到目前为止发现的坏URL的数目和到目前为止处理的一个或多个URL的数目的实时信息来处理该组URL时更新UI。我尝试过用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>
      }

Foreach循环和错误,即并非所有代码路径都返回值:async等待问题

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

顺便说一句,我不认为这种方法意味着你认为它意味着什么。一个方法只返回一次,所以它只处理第一个url。