C#异步编程之:(二)部分心得体会
唉,想好好学学.Net异步编程,可惜没有好的书,又想深入,又想全面。。。现在看得一本Adam Freeman的,感觉很全面,可惜不深入,只能自己慢慢磨石子过河,写点心得:
1. 感觉.Net提出TPL的概念是为了抽象线程和Mutex,Event,临界区这些东西。Task是对线程的抽象,而CancellationToken给我的感觉就是提供了对Task的控制。Token其实应该是Task内部的成员(用以控制Task的进行),但是.Net把他独立出来,在我看来是非常不错的设计。
2. 所以Task和Token就变成了松耦合。在Task内部可以去访问Token对象,但是没有Token的Task照样可以独立运作。
3. 通过多个Task可以关联/引用/使用同一个Token,就可以把多个Task关联了起来。(Task共享内部的状态)
4. 在我看来,Token是遥控器,Task类(本身的静态方法)是广电总局,控制着所有的电视节目(电视台),每一个Task就是每一个电视节目(电视台),电视台节目什么时候放完,不受遥控器支配,只受电视台本身和广电总局控制,所以电视台提供了Result(你不许转台,直到电视剧结束)和Wait(等着电视剧放完,但是电视台很人性化,仍然可以接受遥控器的指令Token)等方法,广电总局提供了WaitAll, WaitAny方法。
4. Token像一个遥控器,发送指令,Task内部的循环,主动查询Token的状态,而执行对应的操作。
5. 作为Thread.Sleep的替代品,CancellationToken.WaitHandler.Sleep()不但提供了原来的功能,更能在Token.Cancel()时,唤醒Task/Thread。