Os blocos de iteradores regulares (ou seja, "retorno de rendimento") são incompatíveis com "async" e "await"?
Isso dá uma boa ideia do que estou tentando fazer:
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;
}
No entanto, recebo um erro do compilador citando "não foi possível carregar a string da mensagem dos recursos".
Aqui está outra tentativa:
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
foreach(var str in strs)
{
yield return await DoSomethingAsync( str)
}
}
Mas, novamente, o compilador retorna um erro: "não foi possível carregar a string da mensagem dos recursos".
Aqui está o código de programação real do meu projeto
Isso é muito útil quando eu tenho uma tarefa de lista, essa tarefa pode ser baixar HTML de uma URL e eu uso a sintaxe "yield return await task", o resultado é eu quero IEnumerable<Foo>
. Não quero escrever este código:
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;
}
Mas parece que preciso.
Obrigado por qualquer ajuda.
IAsyncEnumerator<T>
tipo definido por Arne.