Можно ли «ждать yield return DoSomethingAsync ()»

Регулярные блоки итератора (т.е. "yield return") несовместимы с "async" и «await»?

Это дает хорошее представление о том, что я пытаюсь сделать:

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-адреса и я использую синтаксис «yield return await task», в результате я хочу IEnumerable . Я не хочу писать этот код:

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;
}

Но, похоже, я должен.

Спасибо за любую помощь.

98
задан Panagiotis Kanavos 18 October 2019 в 07:32
поделиться