Task.Delay方法在确登时间推迟之后才会做到的办事,  Task.Delay方法在建霎时间推移之后才会达成的劳作

  • 线程:
    每种Windows进度都有用于进入程序的进去点(entry point)的主线程(Main
    Thread),例如.Net
    framework执行顺序(控制台、Windows
    WPF等应用程序)使用Main()方法作为程序的进入点,调用该措施时会自动建立主线程。
    线程是Windows进程中的独立执行单元,种种线程都有几个主线程(在推行进入点时成立)并且每种线程还能够以程序方法建立新的线程。
    线程的分红与开发银行要求一定的时刻与资本开支,所以那么些进度并不是实时的。

  • Task类:
    与Thread相比较,Task是更抽象的概念,MSDN表明就回顾一句:“表示异步操作”,即为能以二十四线程执行的异步操作,从net
    framework4.5伊始,要树立落到实处Task后台线程最简易的法子就是运用静态方法Task.Run(),在.Net
    Framework 4.0可以调用Task.Factory.StartNew方法,能够兑现平等的成效

  • 线程:
    种种Windows进程都有用于进入程序的进去点(entry point)的主线程(Main
    Thread),例如.Net
    framework执行顺序(控制台、Windows
    WPF等应用程序)使用Main()方法作为程序的进入点,调用该情势时会自动建立主线程。
    线程是Windows进度中的独立执行单元,每一个线程都有二个主线程(在进行进入点时创造)并且每一种线程还足以以程序方法建立新的线程。
    线程的分配与开发银行需求自然的时光与资本花费,所以这些进度并不是实时的。

  • Task类:
    与Thread比较,Task是更抽象的定义,MSDN表达就简单一句:“表示异步操作”,即为能以三十二线程执行的异步操作,从net
    framework4.5发端,要树立落到实处Task后台线程最不难易行的点子就是运用静态方法Task.Run(),在.Net
    Framework 4.0方可调用Task.Factory.StartNew方法,能够达成平等的职能

           
持续工作会告诉Task在做到后继续执行后续的作业,持续工作一般由三个回调方法来兑现,它会在职分到位后实施一回。将一个Task加上频频工作有二种艺术,

           
持续工作会告诉Task在做到后继续执行后续的课业,持续工作一般由3个回调方法来贯彻,它会在职务成功后执行壹遍。将三个Task加上频频工作有二种艺术,

    1. 率先种是调用Task.ContinueWith方法
    2. 第三种是.Net
      Framework4.5剧增的Awaiter方法,它足够重庆大学,因为C#5.0的异步效用正是使用那种措施。先看程序代码来验证
    1. 首先种是调用Task.孔蒂nueWith方法
    2. 第二种是.Net
      Framework4.5激增的Awaiter方法,它相当主要,因为C#5.0的异步作用就是选拔这种办法。先看程序代码来评释

    Task<int> task=Task.Run(
         ()=>Enumerable.Range(1,5000000).Count(n=>(n%3)==0);
         var awaiter=task.GetAwaiter();
         awaiter.OnCompleted(()=>
       {
         int result=awaiter.GetResult();
         Console.WriteLine("整除3的个数有:"+Result);
         Console.WriteLine("Task执行中...")
         Console.ReadLine();
       });
    Task<int> task=Task.Run(
         ()=>Enumerable.Range(1,5000000).Count(n=>(n%3)==0);
         var awaiter=task.GetAwaiter();
         awaiter.OnCompleted(()=>
       {
         int result=awaiter.GetResult();
         Console.WriteLine("整除3的个数有:"+Result);
         Console.WriteLine("Task执行中...")
         Console.ReadLine();
       });

   
调用Task.GetAwaiter方法会再次回到多少个awaiter(等待者)对象,它会让原先的Task在形成或出错之后执行一个委派,假使原先的Task现身谬误,那么当接续工作调用awaited.GetResult()时就会弹出差异。使用GetResult的功利是,超越前的Task出错时,例外能够直接弹出,而不会封装在
aggregateException中。

   
调用Task.GetAwaiter方法会重返七个awaiter(等待者)对象,它会让在此以前的Task在完结或出错之后执行一个委派,若是原先的Task现身错误,那么当接续工作调用awaited.GetResult()时就会弹出不一样。使用GetResult的补益是,超越前的Task出错开上下班时间,例外能够一直弹出,而不会封装在
aggregateException中。

       
  Task.Delay方法在确立即间推迟之后才会完毕的办事,简单地说,它正是Thread.Sleep的异步版本

       
  Task.Delay方法在确立即间推迟之后才会成功的办事,不难地说,它就是Thread.Sleep的异步版本

           Parallel类
重要提供互相循环和区域的支撑,首要有八个方法For、Foreach、Invoke,首要说一下Invoke方法,Invoke方法会简化运营一组并行操作,它承受一组Action[]数组。

           Parallel类
首要提供相互循环和区域的支撑,首要有四个格局For、Foreach、Invoke,主要说一下Invoke方法,Invoke方法会简化运维一组并行操作,它承受一组Action[]数组。

  • Async与await关键词
    有async修饰词不自然有await运算符,但有await运算符一定有async修饰词,遵照微软的提议,开发人士本人编写的异步方法最好也应用“Async”结尾。
  • 异步与线程池
    当在应用程序中山大学量应用三二十四线程技术时,首先有几许亟须小心。.net
    framework
    会在IIS维护四个线程池,当iis接受到一个伸手时,就会从线程池读取一个线程处理的央求,假若使用同步处理程序格局处理此恳请,此线程直到程序处理实现之前,都会一向为投机请求服务,并且此线程不能再为别的请求实行服务,就是所谓的束缚。
    假使线程池够大,就没怎么难点,然而线程池的数据是不难的,当有雅量出人意料请求,或可应伸手线程都没空后端高延迟性互连网职分时,全体线程池的线程都被束缚,那种场所称为线程耗尽。发生线程耗尽,IIS会先导将请求排入队列,如若队列已满时,IIS就会拒绝请求,并显现http503景色,假设异步应用程序不荒谬,可是有时会发生http503景况,那么能够开始拍录,事故为县城靠近的情景,能够试着调高队列长度,例如调高至一千。
  • 八线程与异步
    Task->新线程->读取网络财富
    多线程只是换一条线程来代表原本会被锁定的主线程,也等于用线程能源(CPU与内部存款和储蓄器)换可响应的接口。若是换到异步呢?
    异步->线程池->读取互联网能源
    在线程池中时选取DMA(Direct Memory
    Access,直接内部存储器访问)格局,直接内部存款和储蓄器访问是一种不经过CPU而直白开展内部存款和储蓄器数据读取的编制。CLEvoque提供的异步程序模型正是让开发者足够利用DMA功用来下滑CPU压力
  • Async与await关键词
    有async修饰词不肯定有await运算符,但有await运算符一定有async修饰词,依据微软的提出,开发人士本人编写的异步方法最好也选用“Async”结尾。
  • 异步与线程池
    当在应用程序中山高校量使用二十八线程技术时,首先有少数必须小心。.net
    framework
    会在IIS维护二个线程池,当iis接受到二个请求时,就会从线程池读取1个线程处理的呼吁,若是运用同步处理程序形式处理此呼吁,此线程直到程序处理完成此前,都会直接为团结请求服务,并且此线程不可能再为其余请求实行劳动,正是所谓的牢笼。
    假使线程池够大,就没怎么难题,可是线程池的数量是少数的,当有大气发生请求,或可应伸手线程都没空后端高延迟性网络职分时,全数线程池的线程都被束缚,那种情景称为线程耗尽。发生线程耗尽,IIS会开端将呼吁排入队列,假诺队列已满时,IIS就会拒绝请求,并显现http503景色,若是异步应用程序不荒谬,可是有时会发出http503情形,那么能够开始拍录,事故为县城靠近的动静,能够试着调高队列长度,例如调高至1000。
  • 多线程与异步
    Task->新线程->读取网络能源
    四线程只是换一条线程来替代原本会被锁定的主线程,也等于用线程财富(CPU与内部存款和储蓄器)换可响应的接口。借使换到异步呢?
    异步->线程池->读取网络财富
    在线程池中时选取DMA(Direct Memory
    Access,直接内部存款和储蓄器访问)情势,直接内部存款和储蓄器访问是一种不经过CPU而一向开始展览内部存款和储蓄器数据读取的体制。CL凯雷德提供的异步程序模型就是让开发者丰裕利用DMA效用来下滑CPU压力

     所以结论是:
       -CPU Bound:适合采用多线程;
       -IO  Bound:适合采用异步;
     所以结论是:
       -CPU Bound:适合采用多线程;
       -IO  Bound:适合采用异步;

下一步是时候看看 .Net Core了。

下一步是时候看看 .Net Core了。

相关文章