C#多线程(17):小总结

简介: 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() 方式创建任务;


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

相关文章
|
6月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
199 3
|
6月前
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
|
6月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
3月前
|
数据采集 XML JavaScript
C# 中 ScrapySharp 的多线程下载策略
C# 中 ScrapySharp 的多线程下载策略
|
2月前
|
安全 数据库连接 API
C#一分钟浅谈:多线程编程入门
在现代软件开发中,多线程编程对于提升程序响应性和执行效率至关重要。本文从基础概念入手,详细探讨了C#中的多线程技术,包括线程创建、管理及常见问题的解决策略,如线程安全、死锁和资源泄露等,并通过具体示例帮助读者理解和应用这些技巧,适合初学者快速掌握C#多线程编程。
82 0
|
3月前
|
安全 C# 开发者
【C# 多线程编程陷阱揭秘】:小心!那些让你的程序瞬间崩溃的多线程数据同步异常问题,看完这篇你就能轻松应对!
【8月更文挑战第18天】多线程编程对现代软件开发至关重要,特别是在追求高性能和响应性方面。然而,它也带来了数据同步异常等挑战。本文通过一个简单的计数器示例展示了当多个线程无序地访问共享资源时可能出现的问题,并介绍了如何使用 `lock` 语句来确保线程安全。此外,还提到了其他同步工具如 `Monitor` 和 `Semaphore`,帮助开发者实现更高效的数据同步策略,以达到既保证数据一致性又维持良好性能的目标。
50 0
|
5月前
|
并行计算 算法 C#
C# Mandelbrot和Julia分形图像生成程序更新到2010-9-14版 支持多线程计算 多核处理器
此文档是一个关于分形图像生成器的介绍,作者分享了个人开发的M-J算法集成及色彩创新,包括源代码和历史版本。作者欢迎有兴趣的读者留言交流,并提供了邮箱(delacroix_xu@sina.com)以分享资源。文中还展示了程序的发展历程,如增加了真彩色效果、圈选放大、历史记录等功能,并分享了几幅精美的分形图像。此外,还提到了程序的新特性,如导入ini文件批量输出图像和更新一批图片的功能。文档末尾附有多张程序生成的高分辨率分形图像示例。
|
5月前
|
大数据 C#
C#实现多线程的几种方式
C#实现多线程的几种方式
|
6月前
|
安全 Java C#
C#多线程详解
C#多线程详解
60 0