Как мне позвонить async из Session_Start
в Global.asax?Метод вызова 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
и т.д.), который работает, но предпочел бы асинхронный путь так, что удар db не блокирует.
Выполняется как «async Task» для Session_Start
, код не выполнен, контрольные точки внутри session_start
не попадают.
Крис сказал об этом правильно. Нет оснований для этого быть асинхронным, поскольку это просто не имеет смысла. http://stackoverflow.com/a/38956850/2410379 –
@DavidPine Но что мы должны делать, когда нам нужно использовать API, который доступен только как «async Task»? Стивен Четко избил нас, что мы никогда не должны называть «GetAwaiter()» или «.Result» из-за риска взаимоблокировок - так как ASP может быть.NET Application 'Global' 'Application_Start' безопасно вызывает метод async? –
Dai