Realice la operación asíncrona asp.net mvc fuera de la acción

Quiero poder cargar un usuario desde una base de datos en la nube en cada solicitud y tenerlo disponible en la solicitud en un controlador usando asp.net mvc. El problema es que el marco actual no admite realizar operaciones asíncronas desde filtros de acción. Por lo tanto, los métodos OnActionExecuting, OnAuthorization no me permiten hacer esto. Por ejemplo, tengo el siguiente código que NO funciona (así que no lo intentes). Obtienes una excepción: La operación aún estaba pendiente ".

protected async override void OnAuthorization(AuthorizationContext filterContext)
{
  var user = filterContext.HttpContext.User;
  if (!user.Identity.IsAuthenticated)
  {
    HandleUnauthorizedRequest(filterContext);
    return;
  }

  using (var session = MvcApplication.DocumentStore.OpenAsyncSession())
  {
    User currentUser = await session.LoadAsync<User>(user.Identity.Name);
    if (currentUser == null)
    {
      HandleUnauthorizedRequest(filterContext);
      return;
    }

    filterContext.HttpContext.Items["User"] = currentUser;
  }
}

Entonces, ¿hay alguna otra manera de poder hacer esto? Observo que hay un método de inicio de ejecución en el controlador base:

protected override IAsyncResult BeginExecute(RequestContext requestContext, AsyncCallback callback, object state)
{
  return base.BeginExecute(requestContext, callback, state);
}

¿Podría hacerlo allí posiblemente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta