• 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。


  • 相关阅读:
    js概念理解
    web性能瓶颈
    http协议
    jquery插件开发
    Razor(cshtml)
    从局域网内的其他Linux主机下载文件
    Java多线程学习笔记
    java中String s="abc"及String s=new String("abc")详解
    Object中toString方法
    DAO层,Service层,Controller层、View层、entity层
  • 原文地址:https://www.cnblogs.com/puncha/p/3877015.html
Copyright © 2020-2023  润新知