「すべてのコード パスが値を返すわけではない」というエラーが表示される理由がわかりません (以下のコメント付きコードを参照)。foreach ループが 1 つのパスではなく多数のパスと見なされ、反復が値を返さない可能性があるにもかかわらず、ループが継続する可能性があるためでしょうか?
[ところで、私の目標は、100K の URL を処理し、多くの Web リクエストを作成してそれらが同時にアクティブになるようにし、各 URL のステータス (有効、移動、タイムアウト) をキャプチャしながら、一連の URL が実行されているときに UI を更新することです。これまでに見つかった不正な URL の数と、これまでに処理された URL の数に関するリアルタイムの情報で処理されます。同期 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>
}