编程语言
首页 > 编程语言> > C# 多线程并发关闭开启控制的一种方法

C# 多线程并发关闭开启控制的一种方法

作者:互联网

一 技术目标

我从事工业控制领域,开发程序中包括数据采集系统。数据采集需要进行多线程开闭的操作。线程这个东西,易放难收,需要在实际应用过程中实现一套可靠性高的开闭控制程序。

二 技术过程

 

技术路线讲解之前,首先说明下.net中提供的线程开发类有:Thread,ThreadPool,Task,async/await四种,每种应用场景都是不同的,不能一概而论。

Thread是最早出现的,用于长周期运行,比如:监听等。

ThreadPool是线程池,用来处理大量的短暂的事务操作,是一种用时间换空间的做法。

Task是任务,讲的是多线程之间的组合,关系,配合等,是现在很重要的一种手段,而且衍生出非常多的处理类库,比如:DataFlow。

Async/await最常用的就是异步IO,异步IO多用于文件,数据持久工具,socket等多种资源,用来提升系统性能。

1. Task + 标志位

在初学多线程的时候,多会听到”掌握一种使用就可以了”的论调,其实这是不正确的,必须要分清楚使用场景,使用不同的处理手段。

一开始会使用Task就是受到了上述论调的影响,但凡是使用多线程的地方,都用Task,为了关闭线程,使用了一个bool形的标志位(CancellationTokenSource也可以),但是程序往往在关闭的时候产生问题,假死,报错等等,难以定位问题。主要是由于,程序并没有完全关闭,就重新开始的话,一定会导致问题。所以一定要在所有线程关闭完成的时候,再重新开始。而且,Task是基于线程池的,初始化的效率是低于Thread的,必须要注意。

2. Thread + Abort

Thread是单个单个的线程,可以快速的启动,自带的Abort可以关闭线程,但是官网给出的注释也说明,这个方法并不可靠。

3. Thread + CountdownEvent + 标志位

随着对多线程的了解,线程同步的手段也在不断的更新,CountdownEvent可以对线程数量进行同步,有个这样的工具,就可以非常清楚的知道线程什么时候运行完成了。

 

三 技术模式

四 存在问题

五 总结

 

 

标签:Task,Thread,C#,CountdownEvent,并发,线程,关闭,多线程
来源: https://www.cnblogs.com/slowzero/p/14446162.html