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的最常见方法是访 ...
随机推荐
- C# 开发积累(1)
EntityFramework批量增加时报"...请在调用 AcceptChanges 之前,确保键值是唯一的" http://www.xinglongjian.com/i ...
- UVa 3487 & 蜜汁建图
题意: 有两家公司都想向政府申请某些资源的使用权,并且他们都提供了一些申请列表,列表中含有申请费用和资源种类,同一家公司的申请列表之间不含有重复的资源.政府只可以完整地接受和拒绝谋一份申请列表,问政府 ...
- UVa 11922 & splay的合并与分裂
题意: 1个1—n的排列,实现一下操作:将a—b翻转并移动至序列的最后. SOL: splay维护区间的裸题——不过平衡树的题目貌似都是裸的吧...就是看操作的复杂程度罢... 如何取区间呢,我们在s ...
- Codeforces Round #353 (Div. 2)Restoring Painting
Vasya works as a watchman in the gallery. Unfortunately, one of the most expensive paintings was sto ...
- Codeforces Round #242 (Div. 2) C. Magic Formulas
解题思路是: Q=q1^q2.......^qn = p1^p2......^pn^((1%1)^....(1%n))^((2%1)^......(2%n))^.... 故Q的求解过程分成两部分 第一 ...
- 【POJ】2296 Map Labeler
http://poj.org/problem?id=2296 题意:题意:给你n个点,每个点上都放一个正方形,点只能在正方形的上边或下边的中点上,所有正方形大小一样,不能有面积重叠,求最大的正方形.( ...
- 配置1000条ACE的脚本
配置1000条ACE的脚本 测试 python 引言 在路由器或者交换机产品中,手工配置大量shell命令时,难免繁琐且效率低下,鉴于CRT中支持多种脚本语言,因此可通过脚本执行大量重复的shell配 ...
- 线上Java应用排查和诊断规范
@郑昀 整理 标准做法一:OOM触发HeadpDump 目的: OOM发生时,输出堆栈快照文件,供研发人员分析. 在JVM中,如果98%的时间是用于 GC 且可用的 Heap size 不足2%的时候 ...
- 如何在weka中连接数据库(转)
相关准备: Weka.mysql已安装 MYSQL Driver for JDBC 1.进入weka的安装目录 1)新建文件夹lib和文件夹weka,然后将mysql-connector-java-5 ...
- gerrit使用教程
注:使用时把“user”替换为自己的账号,例如 ueapp: ssh://huang.fei@10.0.64.16:29418/jonet2_0_app_ueapp.git 新的环境下需要先注册g ...