Я использую фабрику пользовательских контроллеров (путем расширения DefaultControllerFactory
) и вызываю пользовательский ActionInvoker
(переопределяя InvokeAction
метод). Теперь мне нужно вызвать метод Async из этого пользовательского ActionInvoker
метода.
Проблема в том, что отсутствует соответствующий метод Async InvokeAction
, который я могу переопределить и использовать для вызова из него моего метода Async. Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения или входные данные для вызова асинхронного метода из InvokeAction
метода.
Ниже приведен пример кода, чтобы прояснить ситуацию.
public class CustomControllerFactory : DefaultControllerFactory
{
// Assign custom Action Invoker
controller.ActionInvoker = new CustomActionInvoker();
}
public class CustomActionInvoker: ControllerActionInvoker
{
public override bool InvokeAction(ControllerContext controllerContext,
string actionName)
{
// can not use await here since InvokeAction method can not be marked Async
var result = await GetView()
base.InvokeActionResult(controllerContext, view);
Return true;
}
}
ОБНОВЛЕНИЕ:
Могу ли я вызвать свой метод Async GetView из синхронного метода (InvokeAction). Мой метод GetView () Async в основном загружает файл из внешнего источника (операция по сети). Я предполагаю, что могу обернуть вызов GetView () в Task.Run, чтобы мой основной поток Asp был доступен для обслуживания какого-то другого веб-запроса. Будет ли Task.Run получать поток только из пула потоков Asp? Если да, то я думаю, что нет никакого реального преимущества, так как в любом случае собираюсь использовать пул потоков Asp, который я не хочу.