.net 同步方法調用異步方法假死


最近使用.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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM