#c# #.net #asp.net-core #.net-core
#c# #.net #asp.net-ядро #.net-ядро
Вопрос:
Я не знаю, может ли кто-нибудь помочь мне лучше понять это.
Я пишу класс, который реализует IActionResult
. Для этого требуется, чтобы мой класс реализовал следующий метод.
Task ExecuteResultAsync(ActionContext context);
В моем случае для реализации этого метода необходимо записать XML, используя XmlWriter
to context.HttpContext.Response.Body
.
Проблема в том, что я не думаю, что мне нужно запускать асинхронно здесь. (Я не знаю, является ли context.HttpContext.Response.Body
это просто потоком памяти. Если это так, я определенно не вижу причин для асинхронного запуска.)
Итак, мои варианты:
-
Используйте асинхронные версии методов XML.
-
Это кажется ненужным и, как будто это действительно может снизить производительность со всеми ненужными
await
s. -
По какой-то причине асинхронные методы имеют совершенно разные аргументы, и я даже не уверен, что это такое.
-
-
Используйте что-то вроде
Task.RunSynchronously()
.-
Влияет ли это на производительность?
-
Нужна ли мне специальная обработка для каких-либо исключений?
-
Комментарии:
1. Спасибо за редактирование (по какой-то причине я не могу отправить вам сообщение под ответом), но взгляните на эту проблему , особенно прочитав этот комментарий .
Ответ №1:
ActionResult
является абстрактным, но определяет public virtual void ExecuteResult(ActionContext context)
, что вы можете переопределить, в дополнение к наследованию IActionResult
.
Также обратите внимание, что ActionResult
реализует IActionResult
. И исходный код для ActionResult
находится в Сети, так что вы даже можете увидеть, как ActionResult
решить эту проблему, создав синхронный метод, который реализует IActionResult.ExecuteResult()
.
Обновить:
К сожалению, запись XML с использованием XmlWriter
to context.HttpContext.Response.Body
вызывает исключение:
Система.Исключение InvalidOperationException: «Синхронные операции запрещены. Вместо этого вызовите WriteAsync или установите для AllowSynchronousIO значение true .’
Это остается проблемой.