AsyncEnumerable
主要是伴随着对异步迭代器的需求而产生的。之前在编写WikiClientLibrary的时候,遇到了一个和分页相关的问题。比如我们要从维基服务器获取所有页面的列表。一个最简单、使用异步的想法如下所示
public async Task<IEnumerable<Page>> FetchAllPagesAsync(Site site) { JToken json = await site.SendReuestAsync(/* ... */); // 向服务器请求所有页面 IList<Page> result = PagesFromJson(); // 将获取到的JSON转换为页面列表 return result; }
这样,客户程序可以使用循环或者LINQ来使用这些条目序列。
但情况没有这么简单。服务器在一次请求中最多只能返回500条结果,那么对于大部分的维基而言,我们可能需要多次请求才能获取到所有的结果。那么,我们要怎么处理这种情况呢?