金色的骷髅 发表于 2015-1-18 11:14:32

ASP.NET网页编程之比及花儿也谢了的await仓酷云

我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。async/task/await三组合是.NETFramework4.5带给.NET开辟者的年夜礼,公道地利用它,能够进步使用程序的吞吐才能。
可是它的利用有点绕人,假如不准确利用,会带来意想不到的成绩——好比await以后一向在守候,比及花儿也谢了,也等不来。
这篇博文将向你展现我们在实践开辟中碰到的这个成绩。
先看一段ASP.NETMVC示例代码:

publicclassBlogController:Controller{publicasyncTask<ActionResult>AwaitDemo(){varresponseHtml=GetResponseHtml("http://www.ckuyun.com/");returnContent(responseHtml);}privatestringGetResponseHtml(stringurl){returnGetResponseContentAsync(url).Result;}privateasyncTask<string>GetResponseContentAsync(stringurl){varhttpClient=newSystem.Net.Http.HttpClient();varresponse=awaithttpClient.GetAsync(url);if(response.StatusCode==System.Net.HttpStatusCode.OK){returnawaitresponse.Content.ReadAsStringAsync();}else{return"error";}}}
代码申明:


[*]在下面的代码中,固然在Action办法之前加了asyncTask<ActionResult>,但因为在办法体中没有利用await,以是实践仍是以同步的体例实行的,与间接利用ActionResult是一样的。
[*]GetResponseHtml是同步办法,GetResponseContentAsync是异步办法,在GetResponseHtml中挪用了异步的GetResponseContentAsync。(假如挪用的是第三方程序集,我们就不晓得在GetResponseHtml中举行了异步伐用,以是这个办法的计划是有成绩的)
这段代码实行了局会是如何呢?
——了局就是没有了局,一向在实行。。。
(注:假如在把持台使用程序中挪用一样的GetResponseHtml,不会呈现这个成绩)
那假如办理这个成绩呢:
办理办法一:在MVCAction中开启一个Task举行await

publicasyncTask<ActionResult>AwaitDemo(){varresponseHtml=awaitTask.Factory.StartNew(()=>GetResponseHtml("http://www.ckuyun.com/"));returnContent(responseHtml);}
办理办法二:将GetResponseHtml酿成异步办法

publicasyncTask<ActionResult>AwaitDemo(){varresponseHtml=awaitGetResponseHtml("http://www.ckuyun.com/");returnContent(responseHtml);}privateasyncTask<string>GetResponseHtml(stringurl){returnawaitGetResponseContentAsync(url);}
明显,第2个办理办法是更好的。
以是,我们在计划一个办法(method)时,假如挪用了async办法,必定要将这个办法自己计划为async的。否则,他人挪用时很简单踩着这个坑,然后就一向等啊等。。。比及花儿谢了,电脑冒烟了,也等不到。
c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。

变相怪杰 发表于 2015-1-20 18:22:27

这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。

灵魂腐蚀 发表于 2015-1-28 15:34:28

比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。

分手快乐 发表于 2015-1-29 19:33:54

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

小妖女 发表于 2015-2-2 13:04:00

ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。

若相依 发表于 2015-2-7 20:33:09

同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。

透明 发表于 2015-2-11 20:50:46

虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。

小女巫 发表于 2015-2-24 05:46:47

碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。

谁可相欹 发表于 2015-3-5 07:15:29

可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。

飘飘悠悠 发表于 2015-3-6 15:45:54

逐步缩小出错代码段的范围,最终确定错误代码的位置。

再见西城 发表于 2015-3-13 04:05:17

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。

再现理想 发表于 2015-3-20 11:39:32

在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的
页: [1]
查看完整版本: ASP.NET网页编程之比及花儿也谢了的await仓酷云