首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >并行执行多个网页(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

复制
相关文章
使用shell并行执行多个脚本
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53906996
用户1148526
2019/05/25
3.4K0
SparkSQL并行执行多个Job的探索
Spark是以TaskSetManager为单元来调度任务的。通常情况下,任务队列中只会有一个TaskSetManager,而通过多线程提交多个Job时,则会有多个TaskSetManager被丢到任务队列中。在有空闲资源的情况下,谁会从队列里被取出来执行就取决于相应的调度策略了。目前,Spark支持FIFO和FAIR两种调度策略。
大数据学习与分享
2022/05/19
8560
SparkSQL并行执行多个Job的探索
SparkSQL并行执行多个Job的探索
Spark是以TaskSetManager为单元来调度任务的。通常情况下,任务队列中只会有一个TaskSetManager,而通过多线程提交多个Job时,则会有多个TaskSetManager被丢到任务队列中。在有空闲资源的情况下,谁会从队列里被取出来执行就取决于相应的调度策略了。目前,Spark支持FIFO和FAIR两种调度策略。
大数据真好玩
2021/11/16
1.5K0
SparkSQL并行执行多个Job的探索
npm并行&串行执行多个scripts命令
通过npm run <commander> 可以运行 package.json 中脚本,Npm 命令不能提供立即运行多个脚本的方式,同时运行需要打开多个终端窗口
奋飛
2020/05/28
6.8K0
npm并行&串行执行多个scripts命令
通过npm run 可以运行 package.json 中脚本,Npm 命令不能提供立即运行多个脚本的方式,同时运行需要打开多个终端窗口
奋飛
2021/08/30
1.6K0
SparkSQL并行执行多个Job的探索
Spark是以TaskSetManager为单元来调度任务的。通常情况下,任务队列中只会有一个TaskSetManager,而通过多线程提交多个Job时,则会有多个TaskSetManager被丢到任务队列中。在有空闲资源的情况下,谁会从队列里被取出来执行就取决于相应的调度策略了。目前,Spark支持FIFO和FAIR两种调度策略。
Spark学习技巧
2022/03/14
1.9K0
SparkSQL并行执行多个Job的探索
js实现多个异步任务的串行和并行执行(add/sum)
参考代码:https://github.com/shfshanyue/Daily-Question/issues/662#issuecomment-885993395
蓓蕾心晴
2022/08/28
1.8K0
并发与并行的区别_并发执行和并行执行
学习多线程的时候会遇到一个名词:并发。这是属于操作系统中的词汇,需要了解并发和并行的区别,从网上搜集了几种说法帮助理解。 一: 并发是指一个处理器同时处理多个任务。 并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。 并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。 来个比喻:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。 二: 并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。所以无论从微观还是从宏观来看,二者都是一起执行的。
全栈程序员站长
2022/11/04
1.4K0
并发与并行的区别_并发执行和并行执行
并行执行任务
在app列表首页,展示多个item,并有分页;而每个item里后台都会调用一个http请求,判断当前item的状态
LiosWong
2018/10/29
7130
并行执行(二)、multiprocessing
multiprocessing包是Python中的多进程管理包。它与 threading.Thread类似,可以利用multiprocessing.Process对象来创建一个进程。该进程可以允许放在Python程序内部编写的函数中。该Process对象与Thread对象的用法相同,拥有is_alive()、join([timeout])、run()、start()、terminate()等方法。属性有:authkey、daemon(要通过start()设置)、exitcode(进程在运行时为None、如果为–N,表示被信号N结束)、name、pid。此外multiprocessing包中也有Lock/Event/Semaphore/Condition类,用来同步进程,其用法也与threading包中的同名类一样。multiprocessing的很大一部份与threading使用同一套API,只不过换到了多进程的情境。这个模块表示像线程一样管理进程,这个是multiprocessing的核心,它与threading很相似,对多核CPU的利用率会比threading好的多。
狼啸风云
2022/07/27
5280
并行执行(二)、multiprocessing
并行执行任务思考
这篇文章由之前的并行执行任务发展而来,如何生成task,在之前的文章中,生成task方式如下:
LiosWong
2018/10/29
4850
[python]map方法与并行执行
由上可见, 调用map, 相当于顺序调用了add(1,4), add(2,5), add(3,6)方法; 一行代码实现了方法的迭代调用, 简单快捷。 那如果再优化一下,实现并行调用add方法, 应该怎么做呢?在python里也好实现, 利用multiprocessing模块就可以。
py3study
2020/01/13
1.3K0
testng执行多个suite
由于testng.xml中只能设置一个<suite>标签,就无法创建多个测试集,通过<suite-files >标签可以实现允许多个测试集。
未来sky
2018/08/30
1.8K0
testng执行多个suite
Python爬取多个网页
最近学到了一个新鲜玩意,Python网页爬取数据脚本,今天我们就来试一试,python爬取数据到底有多方便。
小颜同学
2023/08/21
2900
Python爬取多个网页
Oracle优化08-并行执行
在讨论Oracle的性能问题时,通常要假设一个前提,那就是这个系统是OLTP还是OLAP(或者说数据仓库系统)。 只有在这个前提下,讨论一些性能问题才有意义,因为这两类系统太不一样了,甚至很多技术是相悖的。
小小工匠
2021/08/16
3780
Razor语法
  Razor作为一种全新的模板被MVC3和WebMatrix使用。尽管目前还存在一定性能上面的问题,但一直不喜欢WebForm标签式写法的人已经看到了福音。Razor在减少代码冗余、增强代码可读性和vs 智能感知方面,都有着突出的优势。本文将结合示例,总结出Razor的基本用法,以便于更多人了解Razor、使用Razor。
拓荒者IT
2019/09/26
1.1K0
Razor语法
同一套代码部署多个实例来并行完成某项任务,且避免重复执行
我经常会碰到一些耗时较长的任务,譬如更新5千万条表数据中的某个字段,代码中可以通过分页依次读取db,然后更新即可。但是耗时极长,那么能否通过将代码部署多个实例,譬如启动多个docker来并行执行任务,横向扩展,这样就能大幅减少耗时。
天涯泪小武
2019/01/17
1.2K0
具有依赖关系的并行操作执行
今天看到看到一篇MSDN文章《Parallelizing Operations With Dependencies》,作者是微软Parallel Computing Platform团队的一个开发经理。文中提供出一种用于并行执行一组具有依赖关系的操作的解决方案,这不由得想起我在一年之前写的一个具有相同的功能的组件。于是翻箱倒柜找了出来,进行了一些加工,与大家分享一下。 一、问题分析 我们知道,较之串行化的操作,并行计算将多个任务同时执行,从而充分利用了资源,提高了应用的整体性能。对于多个互不相干的操作,我们
蒋金楠
2018/01/16
2.7K0
具有依赖关系的并行操作执行
Razor 语法快速参考 Razor 语法快速参考
本文引自:http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx
跟着阿笨一起玩NET
2018/09/19
9900
点击加载更多

相似问题

Perl将多个网页并行化

11

并行执行多个NSOperations

12

并行执行多个函数

22

Android -并行执行多个任务

10

并行执行多个异步任务

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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