IAsyncEnumerable
什么时候用 IAsyncEnumerable?
当你需要按需、异步地产生或消费一系列数据时,IAsyncEnumerable 就非常有用。典型场景包括:
从 HTTP 流中逐条读取日志或事件 分批查询数据库并实时返回结果 处理大型文件或数据流,避免一次性加载到内存 实现服务器发送事件(SSE)或 WebSocket 类似的推送模式如何生成异步数据流?
使用 yield return 和 async IAsyncEnumerable
如何消费异步数据流?
使用 await foreach 来安全地遍历 IAsyncEnumerable,它会自动处理每个元素的异步等待。
await foreach (var number in GenerateNumbers()) { Console.WriteLine(number); }这会每 100 毫秒输出一个数字,不会阻塞主线程。
实际应用中的注意事项
处理异步流时要注意资源管理和异常处理:
确保异步流正确释放资源(如文件句柄、网络连接),可结合 IAsyncDisposable 使用 在 yield return 前的异步调用可能抛出异常,应在生成方法内部适当 try-catch 消费者也应考虑超时或取消机制,可通过 CancellationToken 传入例如支持取消:
public async IAsyncEnumerable基本上就这些。IAsyncEnumerable 让你在处理数据流时既能保持响应性,又能写出清晰的代码。不复杂但容易忽略的是:记得用 await foreach,别当成普通集合直接遍历。
