Các khối trình lặp thông thường (tức là "trả về lợi nhuận") không tương thích với "async" và "await"?
Điều này cung cấp một ý tưởng tốt về những gì tôi đang cố gắng làm:
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;
}
Tuy nhiên, tôi gặp lỗi trình biên dịch trích dẫn "không thể tải chuỗi thông báo từ tài nguyên".
Đây là một nỗ lực khác:
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
foreach(var str in strs)
{
yield return await DoSomethingAsync( str)
}
}
Nhưng một lần nữa, trình biên dịch trả về lỗi: "không thể tải chuỗi thông báo từ tài nguyên".
Đây là mã lập trình thực trong dự án của tôi
Điều này rất hữu ích khi tôi có một Nhiệm vụ danh sách, tác vụ đó có thể được tải xuống HTML từ một URL và tôi sử dụng cú pháp "tác vụ trả về chờ đợi", kết quả là tôi muốn IEnumerable<Foo>
. Tôi không muốn viết mã này:
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;
}
Nhưng có vẻ như tôi phải làm vậy.
Cảm ơn vì bất kì sự giúp đỡ.
IAsyncEnumerator<T>
kiểu được xác định bởi Arne.