加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – async任务> throws“不是迭代器接口类型”错误

发布时间:2020-12-15 04:14:16 所属栏目:百科 来源:网络整理
导读:以下代码是throwing不是迭代器接口类型,只有当我使用async等待和包装IEnumerable与任务.如果我删除异步等待,我可以使用IEnumerable List. private async TaskIEnumerableListT GetTableDataAsyncT(CloudTable cloudTable,TableQueryT tableQuery) where T :
以下代码是throwing不是迭代器接口类型,只有当我使用async等待和包装IEnumerable与任务.如果我删除异步等待,我可以使用IEnumerable< List>>.
private async Task<IEnumerable<List<T>>> GetTableDataAsync<T>(CloudTable cloudTable,TableQuery<T> tableQuery)
        where T : ITableEntity,new()
    {
        TableContinuationToken contineousToken = null;
        do
        {
            var currentSegment = await GetAzureTableDateAsync(cloudTable,tableQuery,contineousToken);
            contineousToken = currentSegment.ContinuationToken;
            yield return currentSegment.Results;

        } while (contineousToken != null);

    }

虽然我可以考虑Rx,我不知道是什么导致这个问题.

解决方法

只有方法声明它们返回IEnumerable< T>,IEnumerable,IEnumerator或IEnumerator< T>可以用迭代器块实现.这排除了所有异步方法.

从根本上说,无论如何,如果IEnumerable< T>是基于拉的,而异步方法更具反应性.此外,迭代器块的要点是调用者可以看到中间结果 – 而在async方法本身完成之前,从异步方法返回的任务将不会完成.

你需要采取一种替代方法 – 无论是Rx还是其他方面.你可能不想先考虑实现的样子,但是呼叫者会做什么.也许你实际上想要一个IEnumerable< Task< List< T>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读