通常のイテレーターブロック(つまり、 "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)
}
}
ただし、コンパイラはエラーを返します。「リソースからメッセージ文字列をロードできません」。
これが私のプロジェクトの実際のプログラミングコードです
これは、リストタスクがある場合に非常に便利です。そのタスクは、URLからHTMLをダウンロードでき、構文 "yield return await task"を使用します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>
Arneで定義されているタイプを使用します。