c# - 无法在 Sitefinity MVC Controller 操作中使用异步/等待

标签 c# asp.net-mvc asynchronous async-await sitefinity

我从 Sitefinity forum 交叉发布这个问题收集尽可能多的策略。这个问题类似于this one ,但无论如何我都会发布它以获取有关我们提出的哪些建议解决方法可能更适合的反馈。

Sitefinity 支持使用 MVC Controller 创建小部件。但是,这些 Controller 不能是异步的,也不能返回 Task<>。通常,这很好,因为我们通常会与 Sitefinity 数据交互,该数据具有非异步管理器。

但是,在这种情况下,我们创建的小部件将显示来自第 3 方 API 的数据,并使用 HttpClient 来获取该数据,并且这些操作是异步的。需要明确的是,这些是服务器到服务器 api 调用,不能通过客户端 ajax 调用直接完成。

根据我能够研究和阅读的内容,流行的策略是用 WebClient 替换 HttpClient 并使调用同步(如建议的 here )。这看起来很简单,但我担心这可能会影响性能,因为我们预计高峰时间会同时处理数百甚至数千个用户,并且这些是购买交易,因此它们的性能尤为重要......

我能想到的唯一其他策略是使用 Angular 将站点的这一部分实现为 SPA,并在客户端执行所有操作。但是我们不想在客户端公开我们的 API 调用,所以我们必须构建一个代理来在服务器端传递它们,可能使用常规 Controller (在 Sitefinity 中称为“经典”,一个不驱动小部件的)。

我们是否可以利用任何其他策略在不支持异步的 Controller 中进行异步调用?在这种情况下,您是否同意通过 WebClient 同步调用是更好的选择?如果不是,您会建议使用什么其他选项来解决此限制?

最佳答案

通常,异步方法是这样工作的: enter image description here

AsyncControllerActionInvoker 调用的所有异步操作类。

但这不适用于 sitefinity,因为 Telerik.Sitefinity.Mvc.ControllerActionInvoker(正在处理 mvc 小部件)是同步的。

我很确定其他限制可能不仅在“Invoke Action”级别,更深的地方。我认为只有 Sitefinity 核心开发人员才能详细回答这个问题

关于c# - 无法在 Sitefinity MVC Controller 操作中使用异步/等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43875632/

相关文章:

c# - Facebook 的大表实现

javascript - Node.js 异步模块的复杂用例

c# - WPF - 在 C# 中使用 Storyboard 的 EllipseGeometry 动画

jquery - 更改 digitalBush/jquery.maskedinput 中占位符的颜色

asp.net-mvc - 没有为此对象定义无参数构造函数。

javascript - 当我使用 async/await 时,为什么会收到多个响应?

asp.net - 在 ASP.NET 中通过 AJAX 使用后台工作程序

c# 如何建立UDP套接字连接

c# - 过滤表中不包含 List<string> 中的项目的 DataTable

c# - 组件内的 Blazor 双向绑定(bind)文本区域