常规迭代器块(例如“屈服返回”)是否与“异步”和“等待”不兼容?
这就很好地说明了我正在努力做的事情:
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
// I want to compose the single result to the final result, so I use the SelectMany
var finalResult = UrlStrings.SelectMany(link => //i have an Urlstring Collection
await UrlString.DownLoadHtmlAsync() //download single result; DownLoadHtmlAsync method will Download the url's html code
);
return finalResult;
}
但是,我得到了一个编译器错误,指出“无法从资源中加载消息字符串”。
下面是另一种尝试:
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
foreach(var str in strs)
{
yield return await DoSomethingAsync( str)
}
}
但是,编译器再次返回一个错误: “无法从资源加载消息字符串”。
下面是我的项目中真正的编程代码
这是非常有用的,当我有一个列表任务,该任务可以从一个 URL 下载 HTML
并且我使用语法“结果返回等待任务”,结果是我想要 IEnumerable<Foo>
。我不想写这样的代码:
async Task<IEnumerable<String>> DownLoadAllURL(String [] Strs)
{
List<Foo> htmls= new ...
foreach(var str in strs)
{
var html= await DownLoadHtmlAsync( str)
htmls.Add(item)
}
return htmls;
}
但似乎我必须这么做。
谢谢你的帮助。