唉,想好好学学.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。

本文深入解析了.NET异步编程中的Task和Token概念,通过类比遥控器与电视台,形象地阐述了它们之间的关系和作用。重点讨论了如何利用Token控制Task的执行流程,以及在实际开发中如何合理运用这些机制提高代码的并发性和效率。

被折叠的 条评论
为什么被折叠?



