.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;
}

 

转载于:https://www.cnblogs.com/guozhongxiang/p/10297626.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值