Нет, он возвращает void
не Task
или другой ожидаемый тип, поэтому вызывающий код не сможет определить, когда асинхронная работа завершена.
Если необходимо использовать асинхронный метод в пределах OnActionExecuting
(и это не так, как если бы вы это делали, потому что Entity Framework имеет синхронные эквиваленты), доступны только неоптимальные обходные пути.
Вам потребуется заблокировать текущий поток, но вам нужно будьте осторожны, чтобы не вызвать взаимоблокировку из-за контекста синхронизации ASP. NET.
Один из вариантов - запустить асинхронный код в пуле потоков:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var task = Task.Run(async () => db.Empresa.FindAsync(EmpresaID));
var result = task.Result;
}
Это на самом деле было бы менее эффективно, чем простое использование db.Empresa.Find(EmpresaID)
, так как есть издержки, связанные с Task.Run
.