【发布时间】:2017-11-16 01:21:25
【问题描述】:
我在一个新的 Web 应用程序中编写了一个测试代码,如下所示:
public ActionResult Index()
{
Logger.Write("start Index,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId);
MyMethodAsync(System.Web.HttpContext.Current.Request);//no await and has warning
Logger.Write("end Index,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId);
return View();
}
private async Task MyMethodAsync(HttpRequest request)
{
Logger.Write("start MyMethodAsync,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId);
await SomeMethodAsync(request);
Logger.Write("end MyMethodAsync,threadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId);
}
这是日志:
2017-11-15 19:55:31.904 开始索引,threadId:35
2017-11-15 19:55:31.919 开始 MyMethodAsync,threadId:35
2017-11-15 19:55:31.919 结束索引,threadId:35
2017-11-15 19:55:53.324 结束 MyMethodAsync,threadId:46
客户端浏览器将在2017-11-15 19:55:32左右收到回复,符合我的理解。在我的实际项目生产环境中,它写入与上面相同的日志,但是客户端浏览器在大约 22 秒后收到响应,大约在 2017-11-15 19:55:54。似乎即使主线程完成了工作,主线程也不会返回响应,直到新线程完成工作。
我已经调试了几天这个问题。你能帮帮我吗?
【问题讨论】:
标签: asp.net async-await