
Python與Ollama的開發案例
借助 async/await,我們可以在等待慢操作時,讓服務器同時處理其他任務,從而大幅提高吞吐量。
同步 vs 異步
核心關鍵詞
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;
}
Async
后綴并聲明 async
。Task
。await
,并使用 EF Core 的異步版本,如 ToListAsync()
。同樣思路,用異步版本替換同步調用:
[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
即可。
async
、Task
與 await
的作用及原理。下一步可探索:異步流(IAsyncEnumerable)、并發限制 與 CancellationToken 等高級異步特性。祝編碼順利、高效!
原文引自YouTube視頻:https://www.youtube.com/watch?v=Ao2-wILGkPU