随笔分类 - 多线程
摘要:一、工具类代码 public class TaskHelper { #region 多线程操作 /// <summary> /// 功能描述:多线程执行方法,方法无参数,无返回值 /// </summary> /// <param name="func">方法,如果方法中调用了控件,请使用 Thre
阅读全文
摘要:线程的属性 一、IsBackground C#中线程分为前台线程和后台线程:线程创建时不做设置默认是前台线程。即线程属性 IsBackground=false; Thread.IsBackground = false;//false:设置为前台线程,系统默认为前台线程。 前台线程和后台线程区别:应用
阅读全文
摘要:Task.WhenAll和Task.WhenAny 一、简介 Task.WhenAll()、Task.WhenAny()这两个与Task.WaitALL()、Task.WaitAny()是有区别的,When是异步的,Wait是同步的。Task.WhenAll():所有提供的任务已完成时,创建将完成的
阅读全文
摘要:Task.WaitAll和Task.WaitAny 一、简介 Task.WaitAll:等待所有提供的 Task 对象完成执行过程。Task.WaitAny:等待提供的任一 Task 对象完成执行过程。 二、代码案例 Task.WaitAll 代码: class Program { public c
阅读全文
摘要:CancellationTokenSource 一、代码案例 代码: class Program { private static int TaskMethod(string name, int seconds, CancellationToken token) { Console.WriteLin
阅读全文
摘要:组合ContinueWith 一、代码案例 简单Demo 代码: public static void Main() { //创建一个任务 Task<int> task = new Task<int>(() => { int sum = 0; Console.WriteLine("使用Task異步執
阅读全文
摘要:Task类学习教程—ContinueWith 一、简介 通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务。ContinueWith是Task根据其自身状况,决定后续应该作何操作。也就是说,在运行完task后,会执行task.continuewith(XX)中的XX语句,但是是否执行、如
阅读全文
摘要:C#中的Task.Delay()和Thread.Sleep()区别 一、简介 1.Thread.Sleep()是同步延迟,Task.Delay()是异步延迟。2.Thread.Sleep()会阻塞线程,Task.Delay()不会。3.Thread.Sleep()不能取消,Task.Delay()可
阅读全文
摘要:Task类学习教程—Task的创建方式 一、简介 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:Task支持线程的取消、完成、失败通知等交互性操作,但是ThreadPool不支持;Task支持线程执行的先后次序,但是ThreadPo
阅读全文
摘要:多线程的AutoResetEvent 一、简介 我们在线程编程的时候往往会涉及到线程的通信,通过信号的接受来进行线程是否阻塞的操作。AutoResetEvent 允许线程通过发信号互相通信。通常,此通信涉及线程需要独占访问的资源。具体方法和扩展方法请详见AutoResetEvent类,最常用方法中就
阅读全文
摘要:线程池(ThreadPool) 一、简介 前面介绍了平时用到的大多数的多线程的例子,但在实际开发中使用的线程往往是大量的和更为复杂的,这时,每次都创建线程、启动线程。从性能上来讲,这样做并不理想(因为每使用一个线程就要创建一个,需要占用系统开销);从操作上来讲,每次都要启动,比较麻烦。为此引入的线程
阅读全文
摘要:Mutex 一、简介 Mutex的突出特点是可以跨应用程序域边界对资源进行独占访问,即可以用于同步不同进程中的线程,这种功能当然这是以牺牲更多的系统资源为代价的。主要常用的两个方法:public virtual bool WaitOne() 阻止当前线程,直到当前 System.Threading.
阅读全文
摘要:Monitor类实现线程同步 一、简介 Lock关键字是Monitor的一种替换用法,lock在IL代码中会被翻译成Monitor. lock (obj) { //代码段 } //就等同于 Monitor.Enter(obj); //代码段 Monitor.Exit(obj); Monitor的常用
阅读全文
摘要:LOCK实现线程同步 一、简介 线程安全概念:线程安全是指在当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。当多个线程同时读写同一份共享资源的时候,可能会
阅读全文
摘要:ThreadPriority 一、简介 如果在应用程序中有多个线程在运行,但一些线程比另一些线程重要,这种情况下可以在一个进程中为不同的线程指定不同的优先级。线程的优先级可以通过Thread类Priority属性设置,Priority属性是一个ThreadPriority型枚举,列举了5个优先等级:
阅读全文
摘要:Suspend()和Resume() 一、简介 其实在C# 2.0以后, Suspent()和Resume()方法已经过时了。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被”挂起”的线
阅读全文
摘要:多线程的Join() 一、简介 Join方法主要是用来阻塞调用线程,直到某个线程终止或经过了指定时间为止。官方的解释比较乏味,通俗的说就是创建一个子线程,给它加了这个方法,其它线程就会暂停执行,直到这个线程执行完为止才去执行(包括主线程)。 二、代码 class Program { static v
阅读全文
摘要:多线程的ResetAbort() 一、简介 Abort方法可以通过跑出ThreadAbortException异常中止线程,而使用ResetAbort方法可以取消中止线程的操作,下面通过代码演示使用 ResetAbort方法。 二、代码 class Program { static void Mai
阅读全文
摘要:多线程Abort() 一、简介: Abort()方法用来终止线程,调用此方法强制停止正在执行的线程,它会抛出一个ThreadAbortException异常从而导致目标线程的终止。 二、代码 class Program { static void Main(string[] args) { Thre
阅读全文
摘要:多线程编程基础案例 一、使用线程的理由 1、可以使用线程将代码同其他代码隔离,提高应用程序的可靠性。2、可以使用线程来简化编码。3、可以使用线程来实现并发执行。 二、基本知识1、进程与线程:进程作为操作系统执行程序的基本单位,拥有应用程序的资源,进程包含线程,进程的资源被线程共享,线程不拥有资源。2
阅读全文