在 C# 中,异步流 IAsyncEnumerable<T> 是如何用于数据流处理的?请描述其使用方式与适用场景。
考察说明
考查对 C# 异步流 IAsyncEnumerable 的概念、用法及与同步枚举对比的理解。
回答思路
- 【回答框架 1】IAsyncEnumerable<T> 是 C# 中表示异步枚举的接口,通过 async 迭代器方法(使用 yield return 和 await)逐项异步生成数据,消费者可用 await foreach 遍历,从而支持异步数据流的拉取模式。
- 【回答框架 2】与 IEnumerable<T> 相比,IAsyncEnumerable<T> 允许在生成每个元素时进行异步操作,例如从数据库或网络读取,而不会阻塞调用线程,也支持取消令牌(CancellationToken)以实现协作取消。
- 【回答框架 3】使用要点:定义 async 迭代器方法返回 IAsyncEnumerable<T>,内部使用 await Task.Delay 或异步 I/O 来模拟;消费端使用 await foreach 遍历,并可配合 ConfigureAwait 控制上下文继续。
- 【关键点 1】IAsyncEnumerable<T> 提供异步拉取数据流,避免同步阻塞,提升资源利用率。
- 【关键点 2】通过 async 迭代器结合 yield return 可简便实现异步流。
- 【关键点 3】await foreach 是消费异步流的标准方式,支持取消令牌。
- 【易错点 1】忽视消除同步阻塞,误用 Task.Result 导致死锁或性能下降。
- 【易错点 2】忘记在异步迭代器中使用 await 处理异步操作,导致不必要同步等待。
- 【易错点 3】未考虑取消支持,长时运行流可能无法响应取消请求。