HTML5技术

await和async在一般处理程序中的使用 - wolfy

字号+ 作者:H5之家 来源:博客园 2015-12-24 11:00 我要评论( )

写在前面 有个小项目,前端使用的html页面,那服务端的业务处理就采用最简单的一般处理程序了,之前一直在用,觉得一直用一种方式,确实挺蛋疼的,之前也有了解过async和await的内容。就想着自己折腾折腾。 代码 前端ajax请求 !DOCTYPE htmlhtml xmlns=headme

写在前面

有个小项目,前端使用的html页面,那服务端的业务处理就采用最简单的一般处理程序了,之前一直在用,觉得一直用一种方式,确实挺蛋疼的,之前也有了解过async和await的内容。就想着自己折腾折腾。

代码

前端ajax请求

<!DOCTYPE html> <html xmlns=> <head> <meta http-equiv=content=/> <title>新年签到,赢奖品</title> </head> <body> <div id=></div> </body> </html> <script src=></script> <script> $(function () { $.getJSON(, function (data) { console.log(data); $().html(data); }); }); </script>

一般处理程序

GetUserInfoAsync 的摘要说明 GetUserInfoAsync : IHttpHandler { ProcessRequest(HttpContext context) { context.Response.ContentType = ; var name = await GetUserAsync(); context.Response.Write(name); } private async Task<string> GetUserAsync() { return await Task.Run(() => { ; }); } public bool IsReusable { get { return false; } } }

以为这样就大功告成了。其实这才是悲剧的开始。

满足使用async和await的条件了?

调用的目标方法必须是async的。所以就想着在ProcessRequest方法前加个async就可以了吧。其实不然,在使用async的地方也有特别的要求。

 

详情

大概意思就是异步操作,只能在异步模块中进行。所以就很奇怪了。之前在控制台程序中,也是给Main方法直接添加async的。这里就不行了。

经过查找,发现这样的一个类

using System; using System.ComponentModel; using System.Threading.Tasks; namespace System.Web { // 摘要: HttpTaskAsyncHandler : IHttpAsyncHandler, IHttpHandler { // 摘要: HttpTaskAsyncHandler(); // 摘要: // 当在派生类中重写时,将获取一个指示任务处理程序类实例是否可重用于另一异步任务的值。 // // 返回结果: IsReusable { get; } // 摘要: // 当在派生类中重写时,将提供处理同步任务的代码。 // // 参数: // context: // HTTP 上下文。 // // 异常: // System.NotSupportedException: // 方法实现但不提供任何默认用于异步任务的处理程序。 [EditorBrowsable(EditorBrowsableState.Never)] ProcessRequest(HttpContext context); // // 摘要: // 当在派生类中重写时,将提供处理异步任务的代码。 // // 参数: // context: // HTTP 上下文。 // // 返回结果: Task ProcessRequestAsync(HttpContext context); } }

发现这个抽象类实现自IHttpAsyncHandler, IHttpHandler这两个接口,肯定能满足需求了。那么接下来就对一般处理程序进行改造

GetUserInfoAsync 的摘要说明 GetUserInfoAsync : HttpTaskAsyncHandler { private async Task<string> GetUserAsync() { return await Task.Run(() => { ; }); } Task ProcessRequestAsync(HttpContext context) { context.Response.ContentType = ; var name = await GetUserAsync(); context.Response.Write(name); } }

这样就很方便的将一般处理程序变成一个异步处理的了。

总结

没事折腾一下代码,最近在博客园中看到关于await和async的文章,另外手上也有一个项目,就想着能不能使用异步的方式。所以就有了这篇文章。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 【极品代码】一般人我不告诉他,手机端h5播放时不自动全屏代码 - 你好像很美味

    【极品代码】一般人我不告诉他,手机端h5播放时不自动全屏代码 - 你

    2016-11-02 17:00

  • 使用js制作一般网站首页图片轮播效果 - 骑猪敲代码

    使用js制作一般网站首页图片轮播效果 - 骑猪敲代码

    2016-08-30 16:00

  • 你眼中的async/await是什么样的? - richiezhang

    你眼中的async/await是什么样的? - richiezhang

    2015-12-05 11:22

  • NodeJs通过async/await处理异步 - Yika丶J

    NodeJs通过async/await处理异步 - Yika丶J

    2015-11-26 08:38

网友点评
"