如何在Global.asax中从Session_Start
调用async方法?从Session_Start调用异步方法
的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
等),这是工作,但倾向于异步方式,使击球数据库没有阻塞。
以'异步任务'为Session_Start
这样运行,代码没有执行, session_start
内部的断点没有命中。
Chris说得很对。没有理由这是异步的,因为它根本没有意义。 http://stackoverflow.com/a/38956850/2410379 –
@DavidPine但是,当我们需要使用仅作为异步任务调用的API时,我们应该怎么做? Stephen Clearly已经殴打我们,因为存在死锁的风险,我们决不能调用'GetAwaiter()'或'.Result',所以ASP怎么能。NET应用程序的'Global''Application_Start'方法安全地调用一个异步方法? –
Dai