Les blocs itérateurs ordinaires (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 "unable to load message string from resources".
Voici une autre tentative :
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
foreach(var str in strs)
{
yield return await DoSomethingAsync( str)
}
}
Mais là encore, le compilateur renvoie une erreur : "unable to load message string from resources".
Voici le code de programmation réel de mon projet
C'est très utile lorsque j'ai une liste de tâches, cette tâche peut être téléchargée en HTML à partir d'une URL. et que j'utilise la syntaxe "yield return await 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 doive le faire.
Merci de votre aide.