最近使用.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
时间: 2024-10-17 08:57:36