• C#Web异步操作封装


    using System;
    using System.Collections.Generic;
    using System.Web;
    
    namespace HttpAsync
    {
        /// <summary>
        /// 封装web异步处理请求操作的方法
        /// </summary>
        public abstract class MyHttpAsync : IHttpAsyncHandler
        {
    
            HttpContext context;
            object extraData;
            internal bool _isReusable = false;
    
            /// <summary>
            /// 获取导航开始时传递的可选数据
            /// </summary>
            public object ExtraData
            {
                get { return extraData; }
                //set { extraData = value; }
            }
    
            /// <summary>
            /// 获取当前 HTTP 请求的所有特定信息对象
            /// </summary>
            public HttpContext Context
            {
                get { return context; }
                //set { context = value; }
            }
    
            /// <summary>
            /// 获取当前 HTTP 请求的 System.Web.HttpRequest 对象
            /// </summary>
            public HttpResponse Response
            {
                get { return this.context.Response; }
            }
    
            /// <summary>
            /// 获取当前 HTTP 请求的 System.Web.HttpRequest 对象
            /// </summary>
            public HttpRequest Request
            {
                get { return this.context.Request; }
            }
    
            /// <summary>
            /// web异步请求的入口
            /// </summary>
            public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
            {
                this.context = context;
                this.extraData = extraData;
    
                myIAsyncResult mr = new myIAsyncResult(cb, new delRun(MyAsyncRun));
                mr.myIAsyncResultRun();
                return mr;
    
            }
    
            /// <summary>
            /// 为异步进程提供的一种立即结束方法
            /// </summary>
            public void EndProcessRequest(IAsyncResult result)
            {
                MyEndProcessRequest(result);
            }
    
            /// <summary>
            /// 获取一个布尔值,它指示其他请求是否可以使用 HttpRemotingHandler。
            /// </summary>
            public bool IsReusable
            {
                get { return _isReusable; }
            }
    
            /// <summary>
            /// 处理 HTTP 请求。
            /// </summary>
            /// <param name="context"></param>
            public abstract void MyProcessRequest(HttpContext context);
    
            /// <summary>
            /// 为异步进程提供的一种立即结束方法
            /// </summary>
            public abstract void MyEndProcessRequest(IAsyncResult result);
    
            /// <summary>
            /// 需要异步执行的操作
            /// </summary>
            public abstract void MyAsyncRun();
    
            /// <summary>
            /// 处理 HTTP 请求。
            /// </summary>
            public void ProcessRequest(HttpContext context)
            {
                MyProcessRequest(context);
            }
        }
    
    
    
        /// <summary>
        /// 异步操作类
        /// </summary>
        class myIAsyncResult : IAsyncResult
        {
            AsyncCallback cb;
            delRun dr;
            bool _IsCompleted = false;
    
            public object AsyncState
            {
                get { return null; }
            }
    
            public System.Threading.WaitHandle AsyncWaitHandle
            {
                get { return null; }
            }
    
            public bool CompletedSynchronously
            {
                get { return false; }
            }
      
            public bool IsCompleted
            {
                get { return _IsCompleted; }
            }
    
            public void myIAsyncResultRun()
            {
                dr();
                _IsCompleted = true;
                cb(this);
            }
    
            public myIAsyncResult(AsyncCallback cb, delRun dr)
            {
                this.cb = cb;
                this.dr = dr;
            }
    
    
        }
    
        /// <summary>
        /// 异步执行的委托
        /// </summary>
        delegate void delRun();
    }
  • 相关阅读:
    C#刷遍Leetcode系列连载 索引
    C#刷遍Leetcode面试题系列连载(2): No.38
    C#刷遍Leetcode面试题系列连载(1)
    Windows新终端中玩转ASCII和Emoji游戏的正确姿势
    终于等到你!微软正式上线 Windows Terminal 预览版
    任意公众号的文中插入外链的方法找到了,亲测有效
    只需3步,即可将你的Chromium Edge 浏览器设置成中文
    重磅福利 | 知乎上赞同数最高的1000个回答2019最新版
    黑科技抢先尝(续)
    GitHub上最火爆!码代码不得不知的所有定律法则
  • 原文地址:https://www.cnblogs.com/fumj/p/3534961.html
Copyright © 2020-2023  润新知