随笔分类 - C#多线程与异步
摘要:[TOC] 前言 扯淡了 17 篇,这篇终于开始学习 async 和 await 了,有了前面的基础,来理解 async 和 await 就容易理解多了。 这一篇一定要按照每一个示例,去写代码、执行、输出结果,自己尝试分析思路。 async 微软文档:使用 修饰符可将方法、lambda 表达式或匿名
阅读全文
摘要:前言 本篇内容是小总结和过渡,看完这篇后,就要开始继续学习 C# 多线程中的知识点啦~。 前面,经过 16 篇的学习,我们学习了多线程、锁、线程池、任务、同步、异步等知识,还没有使用到 async、await 这些关键字。 有同学问,现在随便拉一个开源项目,里面几乎都是 async/await 这些
阅读全文
摘要:前言 前面学习了很多多线程和任务的基础知识,这里要来实践一下啦。通过本篇教程,你可以写出一个简单的工作流引擎。 本篇教程内容完成是基于任务的,只需要看过笔者的三篇关于异步的文章,掌握 C# 基础,即可轻松完成。 C#多线程(13):任务基础① C#多线程(14):任务基础② C#多线程(15):任务
阅读全文
摘要:任务基础一共三篇,本篇是第三篇,之后开始学习异步编程、并发、异步I/O的知识。 本篇会继续讲述 Task 的一些 API 和常用的操作。 TaskAwaiter 先说一下 TaskAwaiter,TaskAwaiter 表示等待异步任务完成的对象并为结果提供参数。 Task 有个 GetAwaite
阅读全文
摘要:上一篇,我们学习了任务的基础,学会多种方式场景任务和执行,异步获取返回结果等。上一篇讲述的知识比较多,这一篇只要是代码实践和示例操作。 判断任务状态 属性 说明 IsCanceled 获取此 Task 实例是否由于被取消的原因而已完成执行。 IsCompleted 获取一个值,它表示是否已完成任务。
阅读全文
摘要:多线程编程 多线程编程模式 .NET 中,有三种异步编程模式,分别是基于任务的异步模式(TAP)、基于事件的异步模式(EAP)、异步编程模式(APM)。 基于任务的异步模式 (TAP) :.NET 推荐使用的异步编程方法,该模式使用单一方法表示异步操作的开始和完成。包括我们常用的 async 、aw
阅读全文
摘要:线程池 线程池全称为托管线程池,线程池受 .NET 通用语言运行时(CLR)管理,线程的生命周期由 CLR 处理,因此我们可以专注于实现任务,而不需要理会线程管理。 线程池的应用场景:任务并行库 (TPL)操作、异步 I/O 完成、计时器回调、注册的等待操作、使用委托的异步方法调用和套接字连接。 很
阅读全文
摘要:前面我们学习了很多用于线程管理的 类型,也学习了多种线程同步的使用方法,这一篇主要讲述线程等待相关的内容。 在笔者认真探究多线程前,只会new Thread;锁?Lock;线程等待?Thread.Sleep()。 前面已经探究了创建线程的创建姿势和各种锁的使用,也学习了很多类型,也使用到了很多种等待
阅读全文
摘要:本篇的内容主要是介绍 ReaderWriterLockSlim 类,来实现多线程下的读写分离。 ReaderWriterLockSlim ReaderWriterLock 类:定义支持单个写线程和多个读线程的锁。 ReaderWriterLockSlim 类:表示用于管理资源访问的锁定状态,可实现多
阅读全文
摘要:前言 这一篇,我们将学习用于实现并行任务、使得多个线程有序同步完成多个阶段的任务。 应用场景主要是控制 N 个线程(可随时增加或减少执行的线程),使得多线程在能够在 M 个阶段中保持同步。 线程工作情况如下: 我们接下来 将学习C# 中的 Barrier ,用于实现并行协同工作。 Barrier 类
阅读全文
摘要:解决一个问题 假如,程序需要向一个 Web 发送 5 次请求,受网路波动影响,有一定几率请求失败。如果失败了,就需要重试。 示例代码如下: class Program { private static int count = 0; static void Main(string[] args) {
阅读全文
摘要:区别与示例 AutoResetEvent 和 ManualResetEvent 十分相似。两者之间的区别,在于前者是自动(Auto),后者是手动(Manua)。 你可以先运行下面的示例,再测试两者的区别。 AutoResetEvent 示例: class Program { // 线程通知 priv
阅读全文
摘要:回顾一下,前面 lock、Monitor 部分我们学习了线程锁,Mutex 部分学习了进程同步,Semaphor 部分学习了资源池限制。 这一篇将学习 C# 中用于发送线程通知的 AutoRestEvent 类。 AutoRestEvent 类 用于从一个线程向另一个线程发送通知。 微软文档是这样介
阅读全文
摘要:Semaphore、SemaphoreSlim 类 两者都可以限制同时访问某一资源或资源池的线程数。 这里先不扯理论,我们从案例入手,通过示例代码,慢慢深入了解。 Semaphore 类 这里,先列出 Semaphore 类常用的 API。 其构造函数如下: 构造函数 说明 Semaphore(In
阅读全文
摘要:Mutex 类 Mutex 中文为互斥,Mutex 类叫做互斥锁。它还可用于进程间同步的同步基元。 Mutex 跟 lock 相似,但是 Mutex 支持多个进程。Mutex 大约比 lock 慢 20 倍。 互斥锁(Mutex),用于多线程中防止两条线程同时对一个公共资源进行读写的机制。 Wind
阅读全文
摘要:本章主要讲述多线程竞争下的原子操作。 知识点 竞争条件 当两个或两个以上的线程访问共享数据,并且尝试同时改变它时,就发生争用的情况。它们所依赖的那部分共享数据,叫做竞争条件。 数据争用是竞争条件中的一种,出现竞争条件可能会导致内存(数据)损坏或者出现不确定性的行为。 线程同步 如果有 N 个线程都会
阅读全文
摘要:1,Lock lock 原型 lock 编写实例 2,Monitor 怎么用呢 解释一下 示例 设置获取锁的时效 C# 中,可以使用 lock 关键字和 Monitor 类来解决多线程锁定资源和死锁的问题。 官方解释:lock 语句获取给定对象的互斥 lock,执行语句块,然后释放 lock。 下面
阅读全文
摘要:本篇是《多线程入门和实践(初级)》的第一篇,也是大家相当熟悉和不屑的的最简单的入门部分。作为系列文章,笔者将从最简单的部分开始,与各位伙伴一起不断学习和探究 C# 中的多线程。 对于涉及理论的东西,这里不会过多讨论。更加深入的成分会在中级系列加以说明和探讨,届时会有很多与底层相关的知识。 系列文章一
阅读全文

浙公网安备 33010602011771号