在 Controller Action 中發現 7 個無相依性的服務呼叫,透過 async/await 並行化可大幅提升效能。
asyncawait(否則會序列化)步驟 1:建立非同步包裝方法
public static async Task<string> GetTagAsync(int blogId, int entryId) {
return await Task.Run(() => GetTag(blogId, entryId));
}
public static async Task<string> GetCateListAsync(string blogUrl, int blogId, int entryId) {
return await Task.Run(() => GetCateList(blogUrl, blogId, entryId));
}
步驟 2:啟動並行任務、稍後等待結果
var tagsTask = TagService.GetTagAsync(blogId, postId);
var categoriesTask = BlogCategoryService.GetCateListAsync(blogUrl, blogId, postId);
// ... 其他任務啟動
var tags = await tagsTask;
var categories = await categoriesTask;
// ... 取得其他結果
所有任務同時啟動,總耗時約等於最慢單一任務,而非總和。不修改原有同步方法、不深入資料存取層,以最小改動實現並行化。