zoukankan      html  css  js  c++  java
  • 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。


  • 相关阅读:
    创建Azure虚拟机之Azure Portal方式
    Windows平台启动与关闭Azure虚拟机
    Linux文件操作命令
    vue中使用图片裁剪cropperjs
    Linux权限管理之基本权限
    设计模式6大原则之【迪米特原则】
    设计模式6大原则之【接口隔离原则】
    设计模式6大原则之【单一职责原则】
    sql中的join
    Redis学习之:Redis的使用和优化
  • 原文地址:https://www.cnblogs.com/puncha/p/3877015.html
Copyright © 2011-2022 走看看