仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 606|回复: 8
打印 上一主题 下一主题

[学习教程] 来一篇关于NET的F#与ASP.NET:基于事务的异步形式与异步Action

[复制链接]
莫相离 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:26:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
2003年中微软发布最新版本的ASP.netWebMatrix,对于我们喜欢用Asp.net来编程的朋友实在是个好消息,我也实实在在的将Asp.net更深入的研究了一下,以方便我以后更好的运用它,同时我也讲讲使用它的感受。<p>只管在ASP.NETMVC1中是不克不及间接撑持异步Action,但在ASP.NETMVC2中已正式撑持ASP.NET中的异步哀求处置体例,而且经由过程一种对照易于利用的体例供应给开辟职员利用。只惋惜,因为言语层面的束缚,这类利用体例仍是有些方便,而此时即是F#的用武之地了。
基于事务的异步形式
提及.NET中的异步编程模子,.NET程序员最熟习的应当就是Begin/End办法了。比方在WebRequest类中,便有如许一对办法:
<olclass="dp-xml">varrequest=WebRequest.Create("http://www.51cto.com/");request.BeginGetResponse(ar=>{varresponse=request.EndGetResponse(ar);//usetheresponseobject},null);
在挪用WebRequest工具的BeginGetResponse办法以后,以后挪用线程不会被堵塞,而在异步操纵完成以后,便会挪用一个回调函数(即这里利用Lambda表达式机关的代码快)举行关照,在这个回调函数中挪用EndGetResponse办法即可以失掉一个WebResponse工具作为了局。
在这个异步操纵中,因为巨大的IOCP,我们可使用少少数的线程同时倡议不计其数个毗连(豪不夸大,我已经在IIS里举行Comet实验,同时创建起凌驾2w个毗连举行通讯)。不外,现实上在.NET中另有一种基于事务的异步形式(Event-basedAsynchronousPattern,EAP)。基于事务的异步编程的典范案例之一即是WebClient类:
<olclass="dp-xml">varclient=newWebClient();client.DownloadStringCompleted+=(sender,args)=>{varhtml=args.Result;//...};client.DownloadStringAsync(newUri("http://www.51cto.com/"));
基于事务的异步形式的关头便在于,它是利用事务来作为事情停止时的关照机制。它和Begin/End的异步模子有分明区分。比方,在产生毛病时,关于Begin/End模子来讲会在End办法挪用时抛出非常,而关于基于事务的异步形式来讲,它则是利用事务参数的Exception属性来告知程序员是不是有非常产生。假如Exception属性为null,则申明统统一般,不然它便前往异步伐用过程当中产生的非常。
在ASP.NETMVC中利用异步Action
昔时我的Hack利用的是Begin/End异步编程模子,而ASP.NETMVC2则利用了基于事务的异步形式。环绕这类形式,ASP.NETMVC的AsyncController还供应了相干的帮助办法,让异步Action的编写变得绝对简单一些。这里我则间接援用MSDN上的示例来讲明成绩。起首,我们筹办一个一般的同步Action:

<olclass="dp-xml">publicclassPortalController:Controller{publicActionResultNews(stringcity){varnewnewsService=newNewsService();varheadlines=newsService.GetHeadlines(city);returnView(headlines);}}
与它等价的异步Action则为:
<olclass="dp-xml">publicclassPortalController:AsyncController{publicvoidNewsAsync(stringcity){AsyncManager.OutstandingOperations.Increment();varnewnewsService=newNewsService();newsService.GetHeadlinesCompleted+=(sender,e)=>{AsyncManager.Parameters["headlines"]=e.Value;AsyncManager.OutstandingOperations.Decrement();};newsService.GetHeadlinesAsync(city);}publicActionResultNewsCompleted(string[]headlines){returnView("News",headlines);}}
很明显,异步Action也是尺度的二段式挪用,不外这个二段式挪用却由对照出格的“商定”。在ASP.NETMVC2中利用异步Action时,起首必要承继AsyncController类,并机关XyzAsync及XyzCompleted两个办法,前者前往void,后者前往ActionResult——这便暗示一个异步的Action,名为Xyz。
ASP.NETMVC2中关于异步Action的开辟也供应了必定撑持,这个撑持便来自于AsyncManager。在倡议异步操纵之前,我们能够挪用其OutstandingOperations工具的Increment办法,暗示必要“举行几回异步操纵”。
而每次异步操纵停止以后,也就是在事务的处置函数中,便会挪用对应的Decrement办法。这个办法暗示“完成了一次异步操纵”,而Decrement至零以后ASP.NETMVC便会得知一切的异步操纵已完成,因而便会挪用XynCompleted办法,失掉所需的ActionResult工具。
至于XyzCompleted办法所必要的参数,从代码中即可看出是经由过程AsyncManager的Parameters汇合举行“过渡”的。这里有个不是很幻想的中央,即是利用了字符串这类“弱范例”的体例,假定参数名改动,则对应的字符串也必要随着改动。
选择Begin/End仍是基于事务的异步形式?
很明显,在ASP.NETMVC中利用既可使用Begin/End或是基于事务的异步编程形式,由于ASP.NETMVC自己只是依据AsyncManager的举动来举行异步操纵。不外在ASP.NETMVC中,仿佛更垂青的是基于事务的异步形式。我估量,这是因为两种异步形式关于非常的举动差别所酿成的吧。
<p>正如我之前所提到的那样,在利用Begin/End以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。
只想知道 该用户已被删除
沙发
发表于 2015-1-18 14:40:12 | 只看该作者
主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
若天明 该用户已被删除
板凳
发表于 2015-1-25 12:12:08 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
老尸 该用户已被删除
地板
发表于 2015-2-2 22:04:14 | 只看该作者
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-8 12:24:34 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
爱飞 该用户已被删除
6#
发表于 2015-2-25 14:44:40 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
小魔女 该用户已被删除
7#
发表于 2015-3-7 22:38:24 | 只看该作者
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
金色的骷髅 该用户已被删除
8#
发表于 2015-3-15 16:18:10 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
9#
发表于 2015-3-22 03:07:51 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 17:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表