什么是线程?

  线程简单来说就是一种数据结构,用来管理这个程序的执行状态,其中包括

    1.线程核心对象->寄存器的状态

    2.线程环境块,是一块用户模式下的内存,包含线程的异常处理链的头部.线程的局部存储数据也存在这里

    3.用户模式的堆栈,用户程序的局部变量和参数传递所使用的堆栈,默认情况下Windows将会分配1M的控件用于用户模式的堆栈

    4.内核模式堆栈,用于访问操作系统时使用的堆栈

加入线程池

  >工作者线程

    ThreadPool.QueueUserWorkItem();
  >I/O线程
  
  Beginxxx();
ASP.NET中的线程池设置
  1.Machine.config文件的processModel
  2.httpRuntime配置结点
    minFreeThreads 最少自由线程,默认为8,建议88
    minLocalRequestFreeThreads 默认为4,建议76
    appRequestQueueLimit 请求限制 默认5000

获取步骤:

        Configuration conf= WebConfigurationManager.OpenWebConfiguration(null);
ProcessModelSection pc = conf.GetSection("system.web/processModel") as ProcessModelSection;
HttpModulesSection hs= conf.GetSection("system.web/httpRuntime")as HttpModulesSection;


异步处理程序
  1.需要实现IHttpAsyncHandler接口
异步页面访问Web服务的三种方式
  1.使用AddOnPreRenderCompleteAsync 的方式
  2.使用PageAsyncTask 完成异步
  3.通过Web服务的异步事件进行处理

自定义异步:

  首先生成回调函数EndCallBack

  public  class EndCallBack
{
private EndEventHandler _nextHandler;
public EndCallBack(EndEventHandler ed)
{
this._nextHandler = ed;
}
public void AsyncCallBack(IAsyncResult ia)
{
Console.WriteLine("进到_EndCallBack的AsyncCallBack方法中...........");
_nextHandler(ia);
Console.WriteLine("方法执行完毕...........OVER");
}
}

  生成自定义IAsyncResult

  public class MyIAsyncHandler : IAsyncResult
{
private AsyncCallback _callback;
public MyIAsyncHandler(AsyncCallback callback)
{
this._callback = callback;
}
public void IsComple()
{
IsCompleted = true;
if (this._callback!=null)
{
_callback(this);
}
}
public object AsyncState
{
get;
set;
} public System.Threading.WaitHandle AsyncWaitHandle
{
get;
set;
} public bool CompletedSynchronously
{
get { return false; }
} public bool IsCompleted
{
get;
private set;
}
}

  自定义开始异步和结束异步的方法

   public class DoSomting
{
public IAsyncResult BeginAsync(Object sender,EventArgs e,AsyncCallback ca,Object exData)
{
Console.WriteLine("开始比较耗时的任务......................");
//FileStream fs = new FileStream("EP01.mp4",FileMode.Open,FileAccess.Read);
MyIAsyncHandler i = new MyIAsyncHandler(ca);
ThreadPool.QueueUserWorkItem(d => { Thread.Sleep(3000);
i.IsComple();
});//把复杂的事情交给线程池去做
return i;
}
public void EndAsync(IAsyncResult ia)
{
Console.WriteLine("EndAsync方法被执行拉...............");
}
}

  开始调用方法

 public class MySet
{
private BeginEventHandler _begineventhandler;
private EndEventHandler _endeventhandler;
public MySet(BeginEventHandler b,EndEventHandler e)
{
this._begineventhandler = b;
this._endeventhandler = e;
}
public void DoAsyncWork()
{
DoBeginWork(); }
private void DoBeginWork()
{
Console.WriteLine("开始执行管道 开始部分工作");
if (this._begineventhandler!=null)
{
EndCallBack e = new EndCallBack(this._endeventhandler);
this._begineventhandler(this, EventArgs.Empty, e.AsyncCallBack, null);
}
Console.WriteLine("注意此时管道的开始部分已经结束............");
}
}

  最后开始执行

        static void Main(string[] args)
{
DoSomting d = new DoSomting();
MySet m = new MySet(d.BeginAsync,d.EndAsync);
m.DoAsyncWork();
Console.Read();
}

ASP.NET线程与异步的更多相关文章

  1. 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析

    在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...

  2. 看stackoverflow大牛如何回答何时在ASP.NET中使用异步控制器?

    转载自博客园:http://farb.cnblogs.com/ 今天无意中看到stackoverflow上一个很好的问答,个人觉得很有价值,所以翻译过来和大家共享!希望大家能相互交流. 在ASP.NE ...

  3. ASP.NET之自定义异步HTTP处理程序(图文教程)

    前面我们学习了关于关于自定义同步HTTP处理程序,相信大家可能感觉有所成就,但是这种同步的机制只能对付客户访问较少的情况或者数据处理量不大的情况,而今天这篇文章就是解决同步HTTP处理程序的这个致命缺 ...

  4. Asp.Net 为什么需要异步

    之前看过别人提出为什么在本是多线程的Asp.Net下需要异步环境的时候,提出在Asp.Net环境下本身就是多线程,每个请求就是由一个专门IIS线程负责(咱不说Core下无IIS的情况).所以以此推论A ...

  5. ASP模拟POST请求异步提交数据的方法

    这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...

  6. 【转载】ASP.NET线程安全与静态变量的生命周期浅谈

    ASP.NET线程安全所涉及的是什么呢?让我们先来看看静态变量的生命周期问题,下面是我理解的静态变量的生命周期: void Application_Start开始 void Application_E ...

  7. 线程池 异步I/O线程 <第三篇>

    在学习异步之前先来说说异步的好处,例如对于不需要CPU参数的输入输出操作,可以将实际的处理步骤分为以下三步: 启动处理: 实际的处理,此时不需要CPU参数: 任务完成后的处理: 以上步骤如果仅仅使用一 ...

  8. Asp.net+jquery+ajaxpro异步仿Facebook纵向时间轴效果

    Asp.net+jquery+ajaxpro异步仿Facebook纵向时间轴效果 在一个项目中,用到了时间轴展示产品的开发进度,为了更好用户体验,想到了Facebook的timeline效果, 搜了一 ...

  9. 转载 线程池 异步I/O线程 <第三篇>

    在学习异步之前先来说说异步的好处,例如对于不需要CPU参数的输入输出操作,可以将实际的处理步骤分为以下三步: 启动处理: 实际的处理,此时不需要CPU参数: 任务完成后的处理: 以上步骤如果仅仅使用一 ...

随机推荐

  1. linux0.11文件分析

    在kernel包中有几个重要的文件夹和文件,他们各司其职,处理着有关内核的一些功能操作.其中文件夹有三个:blk_drv(块设备驱动),chr_drv(字符设备驱动),math(数学协处理器)  文件 ...

  2. General Ledger Useful SQL Scripts – Oracle Applications 11i

    General Ledger Useful SQL Scripts – Oracle Applications 11i Contents GL Set of Books Configuration O ...

  3. chinacloud大数据新闻

    2015年大数据发展八大趋势   (0 篇回复) “数据很丰满,信息很骨感”:Sight Machine想用大数据的方法,打碎两者间的屏障   (0 篇回复) 百度携大数据"圈地" ...

  4. poj 水题系列

    题目:http://poj.org/problem?id=3006 筛选法求素数 #include <iostream> #include<cstdio> #include&l ...

  5. 通过移动的Mas接口发送短信

    1. 首先,需要移动公司提供的用户名.密码.服务ID.接口Url等信息. 2. 将短信信息整理成XML格式的字符串,再转为byte数组,通过POST的方式,将短信发往Mas接口.需要引用"M ...

  6. ORACLE DATAGURARD 折腾记二

    前文再续,书接上一回,这次折腾Data Guard的一个重要目的是利用switchover实现机器的升级,怎么switchover呢?按照我的理解,Data Guard的角色切换是这样一个过程: (1 ...

  7. linux mkfs命令参数及用法详解---linux格式化文件系统命令(包括swap分区)

    mkfs 命令  linux格式化磁盘命令           linux mkfs         指令:mkfs 使用权限 : 超级使用者 使用方式 : mkfs [-V] [-t fstype] ...

  8. 《C#并行编程高级教程》第9章 异步编程模型 笔记

    这个章节我个人感觉意义不大,使用现有的APM(异步编程模型)和EAP(基于时间的异步模型)就很够用了,针对WPF和WinForm其实还有一些专门用于UI更新的类. 但是出于完整性,还是将一下怎么使用. ...

  9. 【转】Please define the NDK_PROJECT_PATH variable to point to it

    原文网址:http://blog.csdn.net/yuanjingjiang/article/details/34857623 Please define the NDK_PROJECT_PATH ...

  10. XUtils框架的学习(一)

    一  xutils框架引入到AndroidStudio工程,最简单的方法:① 在APP的build.gradle里面加入 compile 'org.xutils:xutils:3.3.36'.② 一定 ...