2

新的 IAsyncEnumerable 接口很棒,但在通过 API 公开数据时会出现问题。

Anthony Chu 的精彩帖子中获取代码,端点可以工作......直到您获得超过 8162 条记录...... IAsyncEnumerable 的缓冲区限制。

JsonSerialiser 试图在通过网络发送之前缓冲整个集合,而我希望它作为流发送。

管道中有一个修复程序(可能适用于 .NET 6.0 - 自 2021 年 4 月 7 日创建的 PR,请参阅参考资料)。问题线程(下面链接)中发布了一个解决方法,应该可以工作......但是......

  • 什么是从 API 通过线路流式传输集合的当前最佳实践(根据 Anthony Chu 的说法,将 IAsyncEnumerable 转换为 IEnumerable 显然是不好的,因为它阻塞了当前线程
  • 社区中是否有人为此找到了更好的解决方法?

触发问题的代码

[HttpGet]
public async IAsyncEnumerable<int> Get()
{
    for (int i = 0; i < 10000; i++)
    {
        yield return i;
    }
}

使用 .NET 5.0 会出现以下错误:

System.InvalidOperationException: 'AsyncEnumerableReader' reached the configured maximum size of the buffer when enumerating a value of type 'IAsyncEnumerableSandbox.Controllers.TestController+<Get>d__2'. This limit is in place to prevent infinite streams of 'IAsyncEnumerable<>' from continuing indefinitely. If this is not a programming mistake, consider ways to reduce the collection size, or consider manually converting 'IAsyncEnumerableSandbox.Controllers.TestController+<Get>d__2' into a list rather than increasing the limit.

错误提示将 IAsyncEnumerable 转换为列表......但没有内置转换器。

参考

相关问题:澄清 IAsyncEnumerable 如何与 ASP.NET Web API 一起使用

4

0 回答 0