所有文章 > 日积月累 > 异步编程实战:在 .NET 8 ASP.NET Core Web API 中使用 async/await
异步编程实战:在 .NET 8 ASP.NET Core Web API 中使用 async/await

异步编程实战:在 .NET 8 ASP.NET Core Web API 中使用 async/await

引言:为何需要异步?

在现代应用中,数据库调用网络请求 往往是最慢的操作,就像计算机世界里的“乌龟”。即使不断堆硬件,也无法彻底解决根本问题。

借助 async/await,我们可以在等待慢操作时,让服务器同时处理其他任务,从而大幅提高吞吐量。


一、async/await 概念概览

  1. 同步 vs 异步

    • 同步:代码按顺序执行,遇到耗时操作就阻塞。
    • 异步:可以在等待耗时操作时,切换去执行其他代码,让服务器保持高效。

  1. 核心关键词

    • async:仅标记方法为异步,供开发者阅读,无实际功能。
    • Task:异步方法的返回类型,用来承载执行结果。
    • await:让方法在此处“异步挂起”,等待内部耗时操作完成后再继续。


二、将同步方法改为异步方法

我们以 GetStocks(List 端点)为例,演示如何改造:

// 原同步方法:
// public ActionResult<IEnumerable<Stock>> GetStocks() =>
//     _context.Stocks.ToList();

// 改造后:
[HttpGet]
public async Task<ActionResult<IEnumerable<Stock>>> GetStocksAsync()
{
    var stocks = await _context.Stocks.ToListAsync();
    return stocks;
}
  1. 在方法名后加上 Async 后缀并声明 async

  1. 将返回类型改为 Task
  2. 在原来访问数据库的调用后添加 await,并使用 EF Core 的异步版本,如 ToListAsync()


三、Detail 端点与其他 CRUD 操作

同样思路,用异步版本替换同步调用:

[HttpGet("{id}")]
public async Task<ActionResult<Stock>> GetStockAsync(int id)
{
    var stock = await _context.Stocks.FindAsync(id);
    if (stock == null)
        return NotFound();
    return stock;
}
  • 使用 FindAsync 而非 Find,并在前面加 await

其他操作(POST/PUT)

[HttpPost]
public async Task<ActionResult<Stock>> CreateStockAsync(Stock stock)
{
    _context.Stocks.Add(stock);
    await _context.SaveChangesAsync();
    return CreatedAtAction(nameof(GetStockAsync), new { id = stock.Id }, stock);
}
  • 数据库写操作(SaveChangesAsync)也需 await

注意 DELETE 操作
Remove 方法本身是同步的,不要在其上使用 await,只需对 SaveChangesAsync 添加 await 即可。


四、性能验证与测试

  1. 运行项目后,使用 Swagger UI 调用异步端点。
  2. 对比同步与异步调用响应时间,你会发现异步版本能明显减轻服务器阻塞。

  1. 在高并发场景下,异步模式能大幅提升吞吐量。

小结与下一步

  • 理解了 asyncTaskawait 的作用及原理。
  • 掌握了在 Controllers 中将同步 CRUD 方法改为异步方法的流程。
  • 在实际项目中,建议优先对所有数据库和网络调用使用异步 API,以获得更好的性能和可扩展性。

下一步可探索:异步流(IAsyncEnumerable)并发限制CancellationToken 等高级异步特性。祝编码顺利、高效!

原文引自YouTube视频:https://www.youtube.com/watch?v=Ao2-wILGkPU

#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费