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#Web异步操作封装的更多相关文章
- 从零开始搭建Salt Web之封装salt-api接口
salt-api现在已经正常运行,接下来则是实现通过调用salt-api来执行salt命令. 调用salt-api执行命令时,记得携带c_path参数 因为salt中自带了tornado这个库,所以决 ...
- java web数据库连接封装-simple
package cn.cslg.bm.web.util; import java.sql.Connection; import java.sql.DriverManager; import org.a ...
- [web 前端] 封装简单的axios库
转载自https://blog.csdn.net/qq_35844177/article/details/78809499 1.新建http.js文件,封装axios get post 方法 impo ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
- 实战 ASP.NET Web API
Web API 框架是一个面向 Http 协议的通信框架.相对于 WCF 而言,Web API 只面向于 Http 协议设计,而且没有 WCF 那么繁琐的配置.Web API 的开发类似于 ASP.N ...
- 十七、EnterpriseFrameWork框架核心类库之Web控制器
回<[开源]EnterpriseFrameWork框架系列文章索引> EFW框架源代码下载:http://pan.baidu.com/s/1qWJjo3U EFW框架中的WebContro ...
- Web Components之Custom Elements
什么是Web Component? Web Components 包含了多种不同的技术.你可以把Web Components当做是用一系列的Web技术创建的.可重用的用户界面组件的统称.Web Com ...
- ASP.NET Web API 入门大杂烩
[前言] 本文是大杂烩,意思即是:到处Copy再加一点点思考而混在一起的文章,引用来源因为太多太杂故而省略,望原作者原谅. [概述] ASP.NET Web API随ASP.NET MVC 4一起发行 ...
- Native App、Web App 还是Hybrid App?
一.什么是Native App? Native App即原生应用,即我们一般所称的客户端,是针对不同手机系统单独开发的本地应用,如需使用需要先下载到手机并安装,下载Native App的最常见方法是访 ...
随机推荐
- Redis 安装为Window服务
参考: http://www.cnblogs.com/zhoub/p/3841222.html 关键命令 redis-server.exe –service-install conf/redis.co ...
- java 多线程操作List,已经做了同步synchronized,还会有ConcurrentModificationException,知道为什么吗?
如题,最近项目里有个模块我做了异步处理方面的事情,在code过程中发现一个颠覆我对synchronized这个关键字和用法的地方,请问各位java开发者们是否对此有一个合理的解释,不多说,我直接贴出问 ...
- HTML无序列表和有序列表
html无序列表<ul><li></li></ul> ul属性设定:<ul type="square"> 常用属性值 ...
- BZOJ2040 : [2009国家集训队]拯救Protoss的故乡
以根为原点,所有叶子为汇点建立网络. 对于一条边$(x,y,A,B)$,$x$向$y$连边,容量$A$,费用0,再连边,容量$B-A$,费用1. 然后不断增广,直到费用达到$M$为止的最大流即为答案. ...
- ACM: SGU 101 Domino- 欧拉回路-并查集
sgu 101 - Domino Time Limit:250MS Memory Limit:4096KB 64bit IO Format:%I64d & %I64u Desc ...
- C语言中计算变量占用内存空间
C语言中计算变量占用内存空间 在C语言中通常用[sizeof]运算符计算变量占内存空间,如下面的例子:
- 关于Go,你可能不注意的7件事(转的)
http://tonybai.com/2015/09/17/7-things-you-may-not-pay-attation-to-in-go/ code https://github.com/bi ...
- Node.js 手册查询-2-MongoDB数据库方法
MongoDb 标签(空格分隔): 数据库 MongoDb 安装 当前版本 2.X 解压至任意目录,最好不要是c盘. 在根目录下建立一个文件夹用来存储工程 我的例子: 安装至: d:\mongodb ...
- 油田 Oil Deposits
油田 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/L 题意: 输入一个m行n列的字符矩形,统计字符 ...
- Qt 控件随窗口缩放
在Qt的界面设计中,我们有时候希望窗口在最大化的时候,上面的控件也跟着缩放,那么我们就需要调整控件的SizePolicy属性,关于这个属性的讲解请参见我之前的博客Qt SizePolicy 属性,由于 ...