首页 > 解决方案 > 使用 IAsyncEnumerable 重载方法

问题描述

我正在构建一个 API,它将通过查询一个数据库来进行分页和排序,该数据库有很多条目,我停在我构建方法重载的地方,并且可以让它正常工作,至少以正确的方式我认为。

这是一个模拟代码:

    public virtual IAsyncEnumerable<PagedResults<T>> GetPagedItems(int i) 
    {
        return GetPagedItems(null, i);
    }

    public virtual async IAsyncEnumerable<PagedResults<T>> GetPagedItems(string s, int i) 
    {
        //here I get 2 datasets, one with the items (25 for instance)
        //and in the 2nd one I get the total count
        var datasets = await GetItemsFromDB<T>();

        var items = datasets[0].ToList();
        var totalCount = datasets[1].ReadFirst();

       yield return new PagedResults<T>
        {
            Items = items,
            TotalCount = totalCount
        };

    }

我的问题是,在第一种方法(唯一一个参数)中它可以工作,但没有'async'关键字。

在第一个实现中,我添加了异步,但我收到了来自 Visual Studio 的警告,说我无法从迭代器返回值(这是有道理的),然后添加了“yield async”,它抱怨我无法将 PagedResults 转换为IAsyncEnumerable<PagedResults>。

我想知道我的最终实现是否正确,如果我使用第一种方法,它是否可以进行异步流式传输。

标签: c#overloadingiasyncenumerable

解决方案


推荐阅读