Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >并行执行多个网页(Razor)

并行执行多个网页(Razor)
EN

Stack Overflow用户
提问于 2012-03-16 15:51:27
回答 2查看 731关注 0票数 2

我加载并执行我的.cshtml文件,如下所示

代码语言:javascript
运行
AI代码解释
复制
var webPage = WebPage.CreateInstanceFromVirtualPath(_relativeFilePath);

var httpContext = new HttpContextWrapper(HttpContext.Current);
var startPage = StartPage.GetStartPage(webPage, "_PageStart", new[] { "cshtml" });
var pageContext = new WebPageContext(httpContext, webPage, startPage);

var sb = new StringBuilder();
using (var writer = new StringWriter(sb))
{
   webPage.ExecutePageHierarchy(pageContext, writer);
}

string output = sb.ToString().Trim();

现在,由于(在我的世界中),每个.cshtml文件都是一个独立的单元,我可以让上面的代码并行运行N次,但在极少数情况下,它会崩溃,出现下面的异常。

代码语言:javascript
运行
AI代码解释
复制
System.InvalidOperationException: Stack empty.
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.Stack`1.Pop()
   at System.Web.WebPages.TemplateStack.Pop(HttpContextBase httpContext)
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors)
   at System.Web.WebPages.WebPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)

如果禁用并行化并逐个运行所有.cshtml文件,则无法触发异常。这让我想知道是否WebPages的一些内部工作方式不是线程安全的,每个对ExecutePageHierarchy的调用都以某种方式访问当前HttpContext中的一些非唯一值

EN

回答 2

Stack Overflow用户

发布于 2012-03-23 17:30:05

对于多个使用者来说,HttpContext和其他ASP.NET内部对象通常不是线程安全的。如果你的目标仅仅是使用Razor模板引擎来并行处理多件事情,我相信你可以做到,因为Razor本身并不直接依赖于ASP.NET中的任何东西。但是一旦你涉及到.cshtml (System.Web.WebPages),不幸的是你在这一点上会受到ASP.Net的内部特性的限制。

票数 4
EN

Stack Overflow用户

发布于 2012-08-30 06:00:45

只是为了让其他人看到这个帖子。我实现了抽象类HttpContextBase和HttpRequestBase的最小实现。然后,当我想呈现viewPage时,我会提供这些类的新实例,而不是真正的实例。(我没有使用模板框架的原因是我还没有找到一个线程安全的框架,提示一下谁?)

代码语言:javascript
运行
AI代码解释
复制
 public class MockRequest : HttpRequestBase
{
    public override bool IsLocal { get { return false; } }
}

public class MockHttpContext : HttpContextBase
{
    private readonly IDictionary _items = new Hashtable();

    public override HttpRequestBase Request { get { return new MockRequest(); } }

    public override IDictionary Items { get { return _items; } }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9740467

复制
相关文章
C#判断当前系统是32位还是64位
C#判断当前系统是32位还是64位 // The initial C# code for the "plain" WMI query was generated by WMI Code Generator, Version 5.00, http://www.robvanderwoude.com/wmigen.php using System; using System.Management; using System.Collections.Generic; namespace Win32_Proces
用户7108768
2021/11/02
7650
是export还是module.exports,是import还是require,是ES6还是CommonJS,是爱❤️还是责任?
众所周知,在上古年代,node的开发一直被 Commonjs 规范所支配着,这也是悲剧发生的导火索,请看灾难现场:
前端小哥哥
2023/05/04
2480
是export还是module.exports,是import还是require,是ES6还是CommonJS,是爱❤️还是责任?
是风口,还是封口?
2018年7月拼多多在美国纳斯达克敲钟上市,短短三年时间,拼多多汇聚了三亿多用户,过百万卖家,建立起异类的、“拼”的线上电商生态。如此红利让很多企业家投资人纷纷加入了“拼”的热潮中去,而“拼”的形式也被玩出了新花样——社区团购。仅仅数月社区团购百花齐放,十荟团、你我您、食享会、美家优团,呆萝卜、邻邻壹、考拉精选等等社区团购平台拔地而起,风投机构闻风而来,从此又一场资金追逐战正式打响,参与者包括众多一线VC:GGV纪源资本、IDG、红杉中国、愉悦资本、真格基金等。也算是在资本寒冬的时候燃烧起了一把火,让资本市场看到了曙光,但社区团购短期内培养出下一个拼多多真的有那么容易吗?答案:很难。
机器思维研究院
2019/06/10
5520
是风口,还是封口?
C#中谁最快:结构还是类?
在内存当道的日子里,无论什么时候都要考虑这些代码是否会影响程序性能呢? 在现在的世界里,几乎不会去考虑用了几百毫秒,可是在特别的场景了,往往这几百毫米确影响了整个项目的快慢。 通过了解这两者之间的性能差异,希望帮助大家在合适的场景里选择正确的编码。
梁规晓
2019/08/09
4230
C#中谁最快:结构还是类?
AXI是Interface还是Bus?
AXI全称Advanced eXtensible Interface,是Xilinx从6系列的FPGA开始引入的一种接口协议,主要描述了主设备和从设备之间的数据传输方式。该协议是AMBA3.0(Advanced Microcontroller Bus Architecture)中最重要的部分,是一种面向高性能、高带宽、低延迟的片内接口协议。AMBA4.0将其修改升级为AXI4.0,如下图所示。
Lauren的FPGA
2020/09/10
2.2K0
AXI是Interface还是Bus?
Swift 是猴还是猿?
段义鹏
2017/11/03
3.9K0
Swift 是猴还是猿?
Kubernetes是银弹还是智子?
名词解答: 1. 银弹: 比喻为具有极端有效性的解决方法,作为杀手锏、最强杀招、王牌等的代称。 2. 智子: 科幻小说《三体》系列中锁死人类科技的人工智能。
sean.liu
2022/09/07
2570
IP是XCI还是XCIX
Vivado提供了以IP为中心的设计流程。除了Vivado自带的IP Catalog之外,还可以通过以下途径扩展IP Catalog。比如:将System Generator模型以IP形式导入到IP Catalog之中;将Vitis HLS综合后的工程导入IP Catalog之中;通过Vivado IP Packager封装用户IP并添加到IP Catalog之中;将第三方IP导入IP Catalog之中。下图很好地体现了这一设计理念(图片来源:Figure 1-1, ug896)。
Lauren的FPGA
2020/07/20
4.2K0
IP是XCI还是XCIX
什么是Web 3.0? 是真实还是乌托邦?
现在大家时不时地在聊一个新词,科技圈、加密货币圈、风险投资们谈话的时候总是会提起这个词,那就是Web3.0。
ImportSource
2022/04/12
1.1K0
什么是Web 3.0? 是真实还是乌托邦?
C#.NET下使用Sqlite
3.打开中工程,分别点击“项目”,“添加引用”,”浏览“,然后选择1中下载文件中的”System.Data.SQLite.DLL“就可以添加了。注意的是,要选着x86还是x64.这里的x86和x64的意思不是开发者电脑对应的系统,而是开发对象将运行的系统位数。所以,我们选择文件外面的x86即可。
钱塘小甲子
2019/01/29
2.2K0
C#.Net与MATLAB集成
在数学分析工具方面,MATLAB无疑是佼佼者,除了作为软件工具外,MATLAB的自定义编程语言以及混合编程的支持,使其可以与Python、R之类数学分析语言媲美。尤其是在一些传统领域的研究,由于其研究
用户1637609
2018/04/12
1.6K0
C#.Net与MATLAB集成
Python 变量,是容器还是标签?
上一次,我们聊了点关于 Python 中变量的基础知识点。今天继续这个话题聊下去。
Crossin先生
2023/08/29
2650
Python 变量,是容器还是标签?
去重是distinct还是group by?
distinct简单来说就是用来去重的,而group by的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,但应该仔细区分,因为用错场景的话,效率相差可以倍计。
用户6182664
2019/11/21
1.3K1
判断今年是平年还是闰年
Scanner sc = new Scanner(System.in); //接收数据
算法与编程之美
2023/01/03
8060
判断今年是平年还是闰年
redis是CA还是CP呢
CAP原则又称CAP定理,指的是在一个分布式云服务器系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
灬沙师弟
2022/09/16
1.9K1
自学是先看bootstrap还是vue
首先这三个的确都是前端框架,框架是帮助开发者快速开发的工具,不同的框架适用于不同的场景,可以理解为“术业有专攻”
用户1880875
2021/07/27
7100
“飞行汽车”是冷门还是未来?
2020年的北京车展上,何小鹏表示“飞行汽车将会有巨大的市场”,同时首次展示飞行汽车;2021年的上海车展上,小鹏汽车正式发布了第四代智能电动载人飞行器:旅航者X1。
镁客网
2021/06/08
4430
生孩子是国事还是家事?
计划生育是从 1970 年代执行,到 2010 年,出生率从 3.065% 下降至 2010 年的 1.19%。由于人口调控产生了诸如老龄化、劳动人口下降等不利局面,政府逐渐意识到调整人口政策的重要性。2015 年,政府宣布废除「一胎政策」,允许所有妇女生育两个孩子。但是,生育率并没有得到显著提高,2017 年,出生率仅为 1.243%。
用户3596197
2018/10/15
8730
Web 3.0 是泡沫还是金矿?
相信大家近期都被一篇《周星驰亲自招聘,进军Web3.0》的报导刷屏了,加之其承诺“我会亲自拣人”,足以见其对 Web3.0 事情的上心。
架构精进之路
2022/12/21
3080
Web 3.0 是泡沫还是金矿?
点击加载更多

相似问题

Spring Security4和PrimeFaces 5 AJAX请求处理

11

使用spring security在会话超时时注销CAS

12

Spring Security & ExtJS -会话超时时重定向到登录页面

11

JSF 2、Spring Security 3.x和Richfaces 4在ajax请求的会话超时时重定向到登录页面

21

Spring Security会话超时时间太短

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文