Sind reguläre Iteratorblöcke (dh "Yield Return") nicht mit "async" und "await" kompatibel?
Dies gibt eine gute Vorstellung davon, was ich versuche:
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;
}
Ich erhalte jedoch einen Compilerfehler mit der Angabe "Nachrichtenzeichenfolge kann nicht aus Ressourcen geladen werden".
Hier ist ein weiterer Versuch:
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
foreach(var str in strs)
{
yield return await DoSomethingAsync( str)
}
}
Der Compiler gibt jedoch erneut den Fehler "Nachrichtenzeichenfolge kann nicht aus Ressourcen geladen werden" zurück.
Hier ist der eigentliche Programmcode in meinem Projekt
Dies ist sehr nützlich, wenn ich eine Listenaufgabe habe, diese Aufgabe HTML von einer URL herunterladen kann und ich die Syntax "Yield Return Wait Task" verwende. Das Ergebnis ist das, was ich will IEnumerable<Foo>
. Ich möchte diesen Code nicht schreiben:
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;
}
Aber es scheint, dass ich muss.
Vielen Dank für jede Hilfe.
IAsyncEnumerator<T>
von Arne definierten Typ.