Les blocs d'itérateur réguliers (c'est-à-dire "yield return") sont-ils incompatibles avec "async" et "await"?
Cela donne une bonne idée de ce que j'essaie de faire:
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;
}
Cependant, j'obtiens une erreur du compilateur citant "impossible de charger la chaîne de message à partir des ressources".
Voici une autre tentative:
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
foreach(var str in strs)
{
yield return await DoSomethingAsync( str)
}
}
Mais encore une fois, le compilateur renvoie une erreur: "impossible de charger la chaîne de message à partir des ressources".
Voici le vrai code de programmation de mon projet
Ceci est très utile lorsque j'ai une tâche de liste, cette tâche peut être télécharger du HTML à partir d'une URL et j'utilise la syntaxe "yield return wait task", le résultat est que je veux IEnumerable<Foo>
. Je ne veux pas écrire ce code:
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;
}
Mais il semble que je dois le faire.
Merci pour toute aide.
IAsyncEnumerator<T>
type défini par Arne.