zoukankan      html  css  js  c++  java
  • C# 多线程(17):小总结

    前言

    本篇内容是小总结和过渡,看完这篇后,就要开始继续学习 C# 多线程中的知识点啦~。

    前面,经过 16 篇的学习,我们学习了多线程、锁、线程池、任务、同步、异步等知识,还没有使用到 async、await 这些关键字。

    有同学问,现在随便拉一个开源项目,里面几乎都是 async/await 这些组成;使用了 async/await ,结果比不用更加耗性能了;ASP.NET Core 中的管道,异步,回调这些又是啥?

    要搞清楚这些,就要好好了解 Task(任务),先别纠结什么关键字,也不用下别人的项目,然后掉头发猜别人为啥这样写。


    有同学说我文章里面的示例没有写输出结果,这样主要是为了省一些篇幅,避免赘述,读者编写示例代码能够直接输出结果的,一般不会在文章加上输出占位置;读者可以多写代码,自行测试。

    笔者的建议

    额,笔者多线程系列的文章中,出现最多的两句话,是 “后面再说” ,“原理的东西不说太多”。

    主要原因是,很多知识点是交叉穿插,如果放一堆来讲,会很乱,要将这些知识点分开归纳整理,是很麻烦的。我们学习东西的时候,一些知识点,应该留到后面再看;不要让还没有碰到的东西阻碍学习时间。

    另外学习应该是从易到难,先从表面去学习,从代码练手,练习多了,就熟悉门路了,需要的时候再去深入原理。不要一下子把整本书拿来啃。


    笔者写这个系列的文章,参考了 《C# 7.0 核心技术指南》、《C# 7.0 本质论》、《C# 多线程编程实战(原书第二版)》、微软文档和 Google 的资料。

    《C# 7.0 核心技术指南》、《C# 7.0 本质论》这两本书,对多线程,异步这些方面,对于已经掌握的开发者来说,可以补充知识点,对于初学者就不太友好了,学习路线很曲折,不利于初学者学习。笔者觉得技术指南比本质论好一些。

    C# 多线程编程实战(原书第二版)》这边书就没必要看了。。。因为这本书是基于 .NET Fx 4 的,有不少写法是过时的了。另外这边书几乎没用说到原理解析方面的,主要是示例多。示例内容对中文读者也不友好,而且大多数为了示例而示例,对于应用场景方面的使用很缺。

    微软文档的话,主要是参考 API 和解释,但是中文翻译一言难尽。文档中的示例,假如说你在学习一个读写的锁,但是里面出现了很多 Task 等的代码一起组成示例。这就很迷,但是这个是文档,不是教程。也不利于系统式学习。

    上面的资料和书籍,具体好不好,适合不适合,怎么学,就要看个人怎么选择啦。

    复习一下

    由于后面学习的内容,跟前面的任务基础紧密相关,因此请先将前面四篇教程浏览一次,然后按照例子都写出来。

    前面,我们讨论过,创建任务(Task)的话,一共有四种,其中三种是真正有工作内容设定的,最后一种是自定义任务配置。

    下面用序号标识这四种方式:

    // ①
    Task task = new Task(Action action);
    
    // ②
    Task task = Task.Factory.StartNew(Action action);
    
    // ③
    Task task = Task.Run(Action action);
    
    // ④ 
    TaskCompletionSource<int> task = new TaskCompletionSource<int>();
    Task<int> myTask = task.Task;	//  Task myTask = task.Task;
    

    第一种方法,创建的任务,需要使用 .Start() 方法开始这个任务。

    Task.Run()Task.Factory.StartNew() 的简化形式,这两种方式创建的任务会立即执行,然后返回这个任务的 Task 对象。因为任务已经开始,所以不能再使用 .Start() 方法。

    Task.Run() 和 Task.Factory.StartNew() 内部做了不少封装;
    Task.WhenAll()、Task.WhenAny() 等方法,不能使用 new Task() 方式创建任务;

    第四种是便于任务的封装和流程控制,本身不进行任务工作。用得很少,这里忽略掉。

  • 相关阅读:
    左偏树
    论在Windows下远程连接Ubuntu
    ZOJ 3711 Give Me Your Hand
    SGU 495. Kids and Prizes
    POJ 2151 Check the difficulty of problems
    CodeForces 148D. Bag of mice
    HDU 3631 Shortest Path
    HDU 1869 六度分离
    HDU 2544 最短路
    HDU 3584 Cube
  • 原文地址:https://www.cnblogs.com/whuanle/p/12821941.html
Copyright © 2011-2022 走看看