Чи несумісні ітераторські блоки (тобто "повернення прибутковості") несумісні з "асинхронізуванням" та "очікуванням"?
Це дає гарне уявлення про те, що я намагаюся зробити:
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;
}
Однак я отримую помилку компілятора, цитуючи "не в змозі завантажити рядок повідомлення з ресурсів".
Ось ще одна спроба:
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
foreach(var str in strs)
{
yield return await DoSomethingAsync( str)
}
}
Але знову ж таки, компілятор повертає помилку: "не вдається завантажити рядок повідомлення з ресурсів".
Ось справжній код програмування в моєму проекті
Це дуже корисно, коли у мене є завдання зі списком, це завдання може завантажити HTML з URL-адреси, і я використовую синтаксис "повернення доходу чекаю завдання", результат я хочу IEnumerable<Foo>
. Я не хочу писати цей код:
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;
}
Але здається, що я повинен.
Дякуємо за будь-яку допомогу.
IAsyncEnumerator<T>
тип, визначений Арном.