Skip to Content
C#并发编程经典实例(第2版)
book

C#并发编程经典实例(第2版)

by Stephen Cleary
November 2020
Intermediate to advanced
226 pages
5h 34m
Chinese
Posts & Telecom Press
Content preview from C#并发编程经典实例(第2版)
44
3
3.7
 对异步流使用
LINQ
问题
假设要使用经过妥善定义以及完善测试的运算符,来处理异步流。
解决方案
IEnumerable<T>
具有
LINQ to Objects
,而
IObservable<T>
具有
LINQ to Events
。两者都有
扩展方法库,这些方法所定义的运算符可供建立查询。
IAsyncEnumerable<T>
也具备
LINQ
支持,该支持由
.NET
社区提供,包含于
System.Linq.Async
NuGet
包中。
举个例子,关于
LINQ
的一个常见疑问是,如果
Where
的谓词是异步的,该如何使用
Where
运算符。假设要根据一些异步条件过滤序列,比如需要在数据库或
API
中查询每个元素,
判断是否应将其包含在结果序列里。
Where
并不能在异步条件下工作,这是因为
Where
算符的委托必须立即返回同步的答案。
异步流的支持库定义了许多有用的运算符。在下面的示例中,
WhereAwait
是个恰当的选择:
IAsyncEnumerable<
int
> values = SlowRange().WhereAwait(
async value
=>
{
// 执行某些异步操作,判断是否应当包含该元素
await
Task.Delay(10);
return value
% 2 == 0;
});
await foreach
(
int
result
in
values)
{
Console.WriteLine(result);
}
// 生成序列,该序列逐渐减缓 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

解密金融数据

解密金融数据

Justin Pauley
PHP编程:第4版

PHP编程:第4版

Kevin Tatroe, Peter MacIntyre

Publisher Resources

ISBN: 9787115550606