Apakah blok iterator biasa (yaitu "yield return") tidak kompatibel dengan "async" dan "await"?
Ini memberi gambaran bagus tentang apa yang saya coba lakukan:
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;
}
Namun, saya mendapatkan kesalahan kompiler yang mengutip "tidak dapat memuat string pesan dari sumber".
Ini upaya lainnya:
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
foreach(var str in strs)
{
yield return await DoSomethingAsync( str)
}
}
Tetapi sekali lagi, kompilator mengembalikan kesalahan: "tidak dapat memuat string pesan dari sumber daya".
Ini adalah kode pemrograman sebenarnya dalam proyek saya
Ini sangat berguna ketika saya memiliki Tugas Daftar, tugas itu bisa mendownload HTML dari URL dan saya menggunakan sintaks "yield return await task", hasilnya saya inginkan IEnumerable<Foo>
. Saya tidak ingin menulis kode ini:
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;
}
Tapi sepertinya aku harus melakukannya.
Terima kasih atas bantuannya.
IAsyncEnumerator<T>
tipe seperti yang didefinisikan oleh Arne.