.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