博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET线程与异步
阅读量:5337 次
发布时间:2019-06-15

本文共 3740 字,大约阅读时间需要 12 分钟。

   什么是线程?

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

    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();        }

 

转载于:https://www.cnblogs.com/student-note/p/6139074.html

你可能感兴趣的文章
selenium-窗口切换
查看>>
使用vue的v-model自定义 checkbox组件
查看>>
[工具] Sublime Text 使用指南
查看>>
Hangfire在ASP.NET CORE中的简单实现方法
查看>>
Algorithm——何为算法?
查看>>
Web服务器的原理
查看>>
小强升职计读书笔记
查看>>
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
忘记root密码,怎么办
查看>>
linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
查看>>
《黑客与画家》 读书笔记
查看>>
bzoj4407: 于神之怒加强版
查看>>
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
c#的const可以用于引用类型吗
查看>>
手动实现二值化
查看>>