异步让等待不阻塞线程
这里用定时器模拟 I/O:await 等结果,WhenAll 并发等待,CancellationToken 传递取消信号。
运行输出
await
等待 Task 完成后继续
WhenAll
三个分数并发完成
取消
超时触发 OperationCanceledException
异步流
await foreach 分批处理
异步不是让 I/O 更快,而是等待时不占着当前线程。
对应代码
static async Task<string> LoadProfileAsync(string name)
{
await Task.Delay(10);
return $"profile:{name}";
}
Task<int>[] tasks =
[
FetchScoreAsync("math"),
FetchScoreAsync("english"),
FetchScoreAsync("code")
];
int[] scores = await Task.WhenAll(tasks);
using var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromMilliseconds(20));
await SlowOperationAsync(cts.Token);
await foreach (int value in CountAsync(3))
{
Console.WriteLine(value);
}