最近使用.net core 開發了一個項目,具體就不說了跟項目本身無關。先上一段代碼
//示例代碼 //前端調用方法 public string GetName() { return GetUserName().Result; } //服務端實現 public async Task<string> GetUserName() { var userModel=await GetUserModel(); return userModel.Name; } public async Task<UserModel> GetUserModel() { 數據庫查詢 }
很簡單的代碼對吧,就是一個查詢數據庫返回用戶名稱。
然並卵.....
程序每次執行到
var userModel=await GetUserModel();
這句代碼時候就進入假死狀態,由於我測試是使用控制台程序,而控制台程序無法重現這個問題,還把調用方給批了一通。囧
經過千山萬水的查找后,根據dudu這篇文章https://www.cnblogs.com/dudu/p/9860959.html腦中靈光一閃,難道是~~好吧,真的是。
在同步方法中調用async異步方法導致程序假死。具體為什么會造成這個現象,我還沒搞懂(哈哈,打我啊)。解決辦法就是在代碼中進行了一次中轉,
代碼如下
//前端調用方法 public string GetName() { return Task.Factory.StartNew(async () => { return await GetUserName(); }).Result; }