当消费IAsyncEnumerable<T>时,是否可以只从流中读取第一项,然后取消操作并返回它?就像IEnumerable<T>号的FirstOrDefault号?

干杯

推荐答案

通过System.Linq.Async包提供了IAsyncEnumerable上的LINQ运算符.

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);

Csharp相关问答推荐

访问C#中的数据库字段时获取数据是收件箱错误-为什么?&有效,如果声明不有效

Rx.Net -当关闭序列被触发时如何聚合消息并发出中间输出?

EF Core Fluent API中定义的多对多关系

try 还原包时出错:Dapper已经为System.Data.SQLClient定义了依赖项''''

实现List T,为什么LINQ之后它不会返回MyList?<>(无法强制转换WhereListIterator `1类型的对象)'

如何定义EFCore中的多个穿透

从应用程序图API调用访问所有者字段

在调整大小的控件上绘制

MS Graph v5.42.0:在寻呼消息时更改页面大小

DateTime ToString()未以指定格式打印

在PostgreSQL上使用ExecuteSqlRawAsync的C#11原始字符串文字有区分大小写的问题

使用CollectionView时在.NET Maui中显示数据时出现问题

WinUI 3中DoubleCollection崩溃应用程序类型的依赖属性

Azure函数-在外部启动类中生成配置时出错

为什么我的伺服电机不动,下面的代码?

EF Core:如何对关系属性进行建模?

如何使用IHostedService添加数据种子方法

Xamarin.Forms中具有类似AspectFill的图像zoom 的水平滚动视图

如何为控制器PUT操作绑定对象数组

测试单个对象是否与Func<;T,bool>;匹配