Bra*_* B. 6 .net c# linq asynchronous iasyncenumerable
当消费时IAsyncEnumerable<T>,是否可以只从流中读取第一项,然后取消操作并返回它?像FirstOrDefaulton之类的东西IEnumerable<T>?
干杯
请参阅此 Microsoft 教程,了解如何使用IAsyncEnumerable<T>. 您可以获取IAsyncEnumerator<T>并使用它来获取第一个项目。
using (var enumerator = myAsyncEnumerable.GetAsyncEnumerator()){
    // If MoveNextAsync() returns false, the enumerator is empty.
    var first = await enumerator.MoveNextAsync() ? enumerator.Current : default;
}
IAsyncEnumerable 上的 LINQ 运算符是通过System.Linq.Async包提供的。
var discount=await priceStream.FirstOrDefaultAsync(it=>it.Price<cutoff);
不过要小心。对于异步流,您不知道是否有任何匹配的元素,直到流本身关闭或取消等待。匹配的项目可能会在 10 秒、1 天或永远不会出现。这就是为什么您通常也需要传递取消令牌,这样您就可以在一段时间后停止等待:
var cts=new CancellationSource(TimeSpan.FromMinutes(1));
var discount=await priceStream.FirstOrDefaultAsync(
    it=>it.Price<cutoff,
    cts.Token);
运算System.Linq.Async符也允许使用异步谓词:
var discount=await priceStream.FirstOrDefaultAsync(
    async it => await service.IsGoodOfferAsync(it),
    cts.Token);
| 归档时间: | 
 | 
| 查看次数: | 1710 次 | 
| 最近记录: |