下表为多线程操作常见对象:

对象 方法/属性 描述 用途 用法 性能
Thread(线程) Start 启动线程,启动后线程处于System.Threading.ThreadState.Running状态 创建线程后,启动 new Thread(()=>{}).Start();
Sleep 将当前线程挂起指定的毫秒数。 挂起当前线程1秒 Thread.Sleet(1000)
Abort 中止当前线程 停止后续代码运行 Thread.CurrentThread.Abort()
CurrentThread 获取当前线程对象 获取当前线程对象 Thread.CurrentThread
CurrentPrincipal 获取或设置线程的当前负责人(对基于角色的安全性而言)。 可通过ClaimsPrincipal在当前线程中存储相关申明,Abp中的DefaultPrincipalAccessor(IPrincipalAccessor)用来传递当前登陆人信息 Thread.CurrentThread.ManagedThreadId
ManagedThreadId 获取当前托管线程的唯一标识符。    
Task(任务) Run  将在线程池上运行的指定工作排队,并返回 function 所返回的任务的代理项。   Task.Run(()=>{})
Delay  创建一个在指定的时间间隔后完成的任务。   Task.Delay(1000).
WaitAll 等待提供的所有 System.Threading.Tasks.Task 对象完成执行过程。 等待指定Task完成 Task.WaitAll()
WaitAny 等待提供的任一 System.Threading.Tasks.Task 对象完成执行过程。 等待任一一个任务完成即执行后续操作 Task.WaitAny()
FromResult 创建成功完成返回指定结果的任务 在异步开发模式中,常用于返回一个成功的任务,以达到异步调用的方式 Task.FromResult(TResult)
Task<TResult> Result 获取此Task返回值    
ThreadPool(线程池) QueueUserWorkItem 将方法排入队列以便执行,并指定包含该方法所用数据的对象。 此方法在有线程池线程变得可用时执行。  

object data = null;
ThreadPool.QueueUserWorkItem((state) =>
{

}, data);

System.Timers.Timer(定时器),是对System.Threading.Timer封装 Start 通过将 System.Timers.Timer.Enabled 设置为 true 开始引发 System.Timers.Timer.Elapsed 事件。    
Stop 通过将 System.Timers.Timer.Enabled 设置为 false 停止引发 System.Timers.Timer.Elapsed 事件。    
Close  释放由 System.Timers.Timer 占用的资源。    
AutoReset

获取或设置一个布尔值,该值指示 System.Timers.Timer 是否应只引发一次 System.Timers.Timer.Elapsed 事件((false) 或重复 (true))。

应设置为true  
Enabled  获取或设置一个值,该值指示 System.Timers.Timer 是否应引发 System.Timers.Timer.Elapsed 事件。 应设置为true  
Interval  获取或设置引发 System.Timers.Timer.Elapsed 事件的间隔(以毫秒为单位)。    

System.Threading.Timer(定时器)

       

1、Thread(线程)

  官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.thread?redirectedfrom=MSDN&view=netframework-4.7.2

  原生的线程对象,性能相对较低,无法共用现有线程。每次都会创建一个新的线程,涉及到线程的销毁、创建,所以性能相对较低。不建议使用;

  示例:

     public void TestThread()
{
var thread = new Thread(() =>
{
Console.WriteLine($"3、Async Current Thread Id={Thread.CurrentThread.ManagedThreadId.ToString("")} Thread State={Thread.CurrentThread.ThreadState.ToString()}");
});
Console.WriteLine($"1、Async Current Thread Id={Thread.CurrentThread.ManagedThreadId.ToString("")} Thread State={thread.ThreadState.ToString()}");
thread.Start();
Console.WriteLine($"2、Async Current Thread Id={Thread.CurrentThread.ManagedThreadId.ToString("")} Thread State={thread.ThreadState.ToString()}");
Thread.Sleep();
Console.WriteLine($"4、Async Current Thread Id={Thread.CurrentThread.ManagedThreadId.ToString("")} Thread State={thread.ThreadState.ToString()}");
Console.WriteLine(Thread.GetDomainID());
}

2、Task(任务)

  官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.tasks.task?view=netframework-4.7.2

  Task是对ThreadPool的封装,支持等待,不直接创建线程和销毁线程,由ThreadPool管理创建和销毁。建议使用;

  示例:

        public void TestTask()
{
Console.WriteLine($"Async Current Thread Id={Thread.CurrentThread.ManagedThreadId}");
var tasks = new List<Task>();
for (var i = ; i < ; i++)
{
RunTask(i);
}
}
private Task RunTask(int i)
{
return Task.Run(() =>
{
Console.WriteLine($"Sync Current Thread Id={Thread.CurrentThread.ManagedThreadId.ToString("")} i={i.ToString("")}");
});
}

3、ThreadPool(线程池)

  官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.threadpool?view=netframework-4.7.2

  类似与ADO.NET数据库连接池,出发点都是用于统一管理线程的创建和销毁。如果异步任务不需要等待建议使用;

  示例:

 

        public void TestThreadPool()
{
object data = null;
ThreadPool.QueueUserWorkItem((state) =>
{
Console.WriteLine($"Sync Current Thread Id={Thread.CurrentThread.ManagedThreadId.ToString("")} i={i.ToString("")}");
}, data);
}

4、System.Timers.Timer定时器

  System.Threading.Timer官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.timer?view=netframework-4.7.2

  System.Timers.Timer官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.timers.timer?view=netframework-4.7.2

  System.Timers.Timer定时器是对System.Threading.Timer封装,更加方便使用,使用那个看个人习惯;

  示例:

     public void TestTimer()
{
var hubTimer = new System.Timers.Timer( * )
{
AutoReset = true,
Enabled = true,
};
hubTimer.Elapsed += Run;//注册事件
hubTimer.Elapsed -= Run;//取消事件
hubTimer.Start();
} public void Run(object sender, ElapsedEventArgs e)
{ }

.NET多线程之Thread、Task、ThreadPool、Timer的更多相关文章

  1. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

  2. iOS多线程之Thread

    多线程 • Thread 是苹果官方提供的,简单已用,可以直接操作线程对象.不过需要程序员自己管理线程的生命周期,主要是创建那部分 优缺点 面向对象,简单易用 直接操作线程对象 需要自己管理线程生命周 ...

  3. Java多线程之Thread、Runnable、Callable及线程池

    一.多线程 线程是指进程中的一个执行流程,一个进程中可以有多个线程.如java.exe进程中可以运行很多线程.进程是运行中的程序,是内存等资源的集合,线程是属于某个进程的,进程中的多个线程共享进程中的 ...

  4. java--多线程之Thread继承

    多线程,是java的特殊机制.所谓线程就是程序执行的流程.“多线程”就是可以在同一时刻能够执行多个程序块(注意,是程序块,而不是程序),这样一来就可以使得程序的执行速度大大增加. package Te ...

  5. Android线程之Thread 、Runnable 的两个例子

    Thread例子: package fy.test; import android.app.Activity; import android.os.Bundle; import android.os. ...

  6. (一)java多线程之Thread

    本人邮箱: kco1989@qq.com 欢迎转载,转载请注明网址 http://blog.csdn.net/tianshi_kco github: https://github.com/kco198 ...

  7. 多线程之Thread

    Thread类可以创建和控制线程,Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数. Thread类默认创建的是前台线程,所以我 ...

  8. C# 多线程之Thread类

    使用System.Threading.Thread类可以创建和控制线程. 常用的构造函数有:   // 摘要: // 初始化 System.Threading.Thread 类的新实例,指定允许对象在 ...

  9. 多线程之Thread类

    Java并发编程:Thread类的使用 在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知 ...

随机推荐

  1. 深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数

    原文:深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数 概述 COLUMNS_UPDATED函数能够出现在INSERT或UPDATE触发器中AS关键字后的任何位置,用来 ...

  2. windows界面程序设计,设置一个窗口始终在屏幕最前,SetWindowPos函数

    有时这种需求还是很必须的,比如现在做的一个登录验证系统,如果在windows登录界面点击到窗口外面,那窗口就会永远隐藏掉没法再启用了.这种情况必须设置该窗口一直在最前. 使用函数SetWindowPo ...

  3. Android实现dialog时候弹出软键盘dialog移位问题

    Window win = getWindow(); WindowManager.LayoutParams params = win.getAttributes(); win.setSoftInputM ...

  4. Creating a Linux Daemon (service) in Delphi

    With the introduction of the Linux target for Delphi, a wide range of possibilities are opened up to ...

  5. 静态dll的问题终于搞定了

    导入plugin,构建qapplicationhttps://forum.qt.io/topic/60940/qt-static-dll-x64-using-qapplication-issues/2 ...

  6. QQ空间玩吧HTML5游戏引擎使用比例分析

    GameLook报道/“Cocos 2015开发者大会(春季)”于4月2日在国家会议中心圆满落下帷幕.在会上全新的3D编辑器,Cocos Runtime等产品重磅公布,给业界带来了Cocos这款国产引 ...

  7. VC6下 try catch 在release下的杯具(默认情况下,要加上throw语句catch才不会被优化掉)

    IDE:VC6 今天遇到一个小问题,把我郁闷了好久,××医生的VulEngine不时在wcsstr处发生crash,加了一番强大的参数检查后,再加上了强大的try catch,其实不是很喜欢用try和 ...

  8. Eric Linux - 1 Basic concepts of linux

    Computer basic Computer 5 parts CPU Input Output Memory External storage device. CPU RISC: Reduced I ...

  9. 条款17:以独立语句将newed对象置入智能指针

    请牢记: 以独立语句将newed对象存储于(置入)智能指针内.如果不这样做,一旦异常被跑出来,有可能导致难以察觉的资源泄露. 假设有个函数用来处理程序的优先权,另一个函数用来在某动态分配所得的Widg ...

  10. Python一基本数据类型(dict)

    一. 字典的简单介绍    字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是 唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后 ...