I blocchi iteratori regolari (cioè "yield return") sono incompatibili con "async" e "await"?
Questo dà una buona idea di quello che sto cercando di fare:
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;
}
Tuttavia, ottengo un errore del compilatore che indica "impossibile caricare la stringa del messaggio dalle risorse".
Ecco un altro tentativo:
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
foreach(var str in strs)
{
yield return await DoSomethingAsync( str)
}
}
Ma ancora una volta, il compilatore restituisce un errore: "impossibile caricare la stringa del messaggio dalle risorse".
Ecco il vero codice di programmazione nel mio progetto
Questo è molto utile quando ho un'attività List, che può essere scaricata HTML da un URL e io uso la sintassi "yield return await task", il risultato è che voglio IEnumerable<Foo>
. Non voglio scrivere questo codice:
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;
}
Ma sembra che debba farlo.
Grazie per qualsiasi aiuto.
IAsyncEnumerator<T>
tipo definito da Arne.