如何创建Azure.AsyncPageable以模拟C#方法的返回值?
模拟返回Azure.AsyncPageable类型的C#方法方案
Azure.AsyncPageable没有公开构造函数,但可以通过其静态方法FromAsyncEnumerable,基于IAsyncEnumerable<T>创建实例,List等同步集合也能先转换为异步枚举再处理。
具体实现方式
从IAsyncEnumerable直接创建
调用AsyncPageable<T>.FromAsyncEnumerable传入异步枚举即可:public AsyncPageable<string> GetMockPageable() { var asyncEnumerable = new[] { "item1", "item2", "item3" }.ToAsyncEnumerable(); return AsyncPageable<string>.FromAsyncEnumerable(asyncEnumerable); }(注:
ToAsyncEnumerable需要引用System.Linq.AsyncNuGet包,也可以手动实现简单的IAsyncEnumerable)从List等同步集合转换创建
先把同步集合包装成IAsyncEnumerable,再生成AsyncPageable:public AsyncPageable<int> GetMockPageableFromList() { var list = new List<int> { 1, 2, 3, 4 }; async IAsyncEnumerable<int> WrapListAsync() { foreach (var item in list) { yield return item; // 可选:模拟异步操作延迟,贴近真实场景 await Task.Delay(10); } } return AsyncPageable<int>.FromAsyncEnumerable(WrapListAsync()); }
模拟真实分页行为(可选)
如果需要模拟分页返回逻辑,可在IAsyncEnumerable中手动控制分批输出:
public AsyncPageable<MyModel> GetPagedMockData() { var allItems = Enumerable.Range(1, 10).Select(i => new MyModel { Id = i, Name = $"Item {i}" }); const int pageSize = 3; async IAsyncEnumerable<MyModel> PagedAsyncEnumerable() { var pages = allItems.Chunk(pageSize); foreach (var page in pages) { foreach (var item in page) { yield return item; } // 模拟分页请求的异步等待 await Task.Delay(50); } } return AsyncPageable<MyModel>.FromAsyncEnumerable(PagedAsyncEnumerable()); } public class MyModel { public int Id { get; set; } public string Name { get; set; } }
内容的提问来源于stack exchange,提问作者Claus Appel
相关产品推荐
相关产品推荐

