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>
}
编译器抱怨urls.Rows
不包含任何元素的情况。在这种情况下,该方法将永远不会遇到return
语句。
顺便说一句,我不认为这种方法意味着你认为它意味着什么。一个方法只返回一次,所以它只处理第一个url。