thd*_*thd 1 c# asp.net-mvc async-await
我有一个MVC5项目,它在类库项目中使用服务和存储库.当我将以下代码作为MVC项目运行/调试时,执行挂起在"return await client.GetAsync(url);" 在存储库中.没有异常被抛出.
如果我从单元测试或控制台应用程序调用相同的服务代码和存储库代码,那么代码工作正常.
代码有什么问题或者我做错了什么?
//文件:TestController.cs
public ActionResult Index(string q)
{
//Code
var mySvc = new MyService();
var svcResponse = mySvc.GetAsync(q).Result;
//More code
}
Run Code Online (Sandbox Code Playgroud)
//文件:MyService.cs
public async Task<MyResponse> GetAsync(string q)
{
var myRepo = new MyRepository();
var response = await myRepo.GetAsync(q);
var json = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<MyResponse>(json);
}
Run Code Online (Sandbox Code Playgroud)
//文件:MyRepository.cs
public async Task<HttpResponseMessage> GetAsync(string q)
{
var url = URL_CONSTANT + q;
using (var client = new HttpClient())
{
return await client.GetAsync(url); //Execution hangs here when MVC!
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
您应该使控制器方法异步而不是阻止.Result(导致死锁).你的控制器动作应该是这样的
public async Task<IActionResult> Index(string q)
{
//Code
var mySvc = new MyService();
var svcResponse = await mySvc.GetAsync(q);
//More code
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此处http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |