Async处理http请求

本文介绍了一个使用C#的Async和await特性来异步处理HTTP请求的例子。通过继承HttpTaskAsyncHandler类并实现DoAsync方法来处理GET和POST请求,展示了如何使用Task.Run将业务处理逻辑放入后台线程执行。

何谓Async?

请参考 http://www.cnblogs.com/jesse2013/p/async-and-await.html。

通过一下例子,看是怎样异步处理http请求的。

    public class ServerCmdHandle : HttpTaskAsyncHandler //继承异步处理方法
    {

    private async Task<string> DoAsync(HttpContext context, Object reqStr)
        {
            string recvInfo = System.Web.HttpUtility.UrlDecode(System.Text.Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(reqStr as string)));
            return await Task.Run(() =>
            {
                return Global.bus.ProcessBusiness(context, recvInfo);//实现异步处理的方法
            });
        }

        public override async System.Threading.Tasks.Task ProcessRequestAsync(HttpContext context)
        {
            try
            {
                string result = "";
                if (context.Request.RequestType.CompareTo("GET") == 0)
                {
                    result = await DoAsync(context, context.Request.QueryString["data"].ToString() as Object);
                }
                else if (context.Request.RequestType.CompareTo("POST") == 0)
                {
                    System.IO.Stream resStream = context.Request.GetBufferlessInputStream();
                    System.IO.StreamReader reader = new System.IO.StreamReader(resStream, Encoding.Default);
                    string resInfo = reader.ReadToEnd();
                    if (resInfo.Length > 0)
                    {
                        result = await DoAsync(context, resInfo as Object);//异步等待处理结果
                    }
                }
                else
                {
                    throw new Exception("user requset method error");
                }
                context.Response.ContentType = "text/plain";
                context.Response.Write(result);
            }
            catch (Exception ex)
            {
                ServiceLogger.LOG_INFO("func=> ProcessRequestAsync:" + ex.Message, 0);
            }

        }


    }

 

转载于:https://www.cnblogs.com/Yunshine-sina/p/5553659.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值