private static async Task<TResult> XAsync()
  {
           
     test(); //X()同步方法0
        
     XXAsync();//"异步方法1"

     return await XXXAsync(); //XXAsync()异步方法2
  }

1.c#程序运行会产生一个主线程,如果是同步方法运行,方法体的的所有方法,都会由主线程去完成,整个方法完成后才会释放主线程。

如何理解主线程已完成呢?Asp.net Mvc 的机制就在这里,我们都知道,IIS里的线程池是有限的,每次的Client端请求,都会到线程池里取一个空闲的线程,如果主线程一直在”占用“线程池,

很快线程池就会被利用完啦。此时我们平时说的”吞吐量“的高低就是与此息息相关!当线程池被请求完后,再次有新的Client端请求,要会等待线程池的释放。


而mvc 就引用了控制器里异步方法的机制,原理就是让耗时的线程,直接返回,交给主线程,从而主线程会第一时间释放线程池的占用,而耗时的子线程完成时,将会在await标记从继续运行,
posted on 2018-05-15 15:58  FlowLight  阅读(209)  评论(0编辑  收藏  举报