无法在Sitefinity MVC控制器操作中使用async / await

时间:2017-05-09 16:51:21

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

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

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

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

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

我能想到的唯一其他策略是使用angular实现站点的这一部分作为SPA并在客户端执行所有操作。但是我们不希望在客户端公开我们的API调用,所以我们必须构建一个代理来在服务器端传递它们,可能使用常规控制器(" classic&# 34;因为它在Sitefinity中被调用,一个不驱动小部件的人。)

我们可以利用其他策略在不支持异步的控制器中进行异步调用吗?你是否同意在这种情况下通过WebClient同步调用是更好的选择?如果没有,您建议使用哪种其他选择来解决此限制?

1 个答案:

答案 0 :(得分:3)

通常,异步方法的工作方式如下: enter image description here

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

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

我很确定其他限制可能不仅仅在“调用操作”级别,更深层次。我认为只有Sitefinity核心开发人员可以深入细节地回答这个问题