如何在Global.asax的Session_Start中调用async
方法?
Global.asax:
protected async Task Session_Start(object sender, EventArgs e)
{
Session.Timeout = 10;
// Do some asynch work
await repository.SetStatsInfo(System.DateTime.Now);
}
异步方法:
public async Task SetStatsInfo(DateTime time)
{
using (ApplicationDBContext db = new ApplicationDBContext())
{
// Do stuff (update visitors counter in db) ..
await db.SaveChangesAsync();
}
}
我可以同步运行所有内容(定义void Session_Start
等),这是可行的,但我更喜欢异步方式,以便访问数据库时不会阻塞。
使用“async Task”运行Session_Start
,代码不会执行,session_start
内部的断点也没有被触发。
async Task<T>
调用可用的API时,我们该怎么办呢?Stephen Clearly已经告诉我们,由于死锁的风险,我们绝不能调用GetAwaiter()
或.Result
- 那么ASP.NET应用程序的Global
Application_Start
方法如何安全地调用异步方法呢? - DaiSession_Start
是一个事件处理程序。能够异步处理事件显然是有意义的。 - Johann