多线程——Task
Posted yangmengke2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程——Task相关的知识,希望对你有一定的参考价值。
1.进程、线程、多线程、计算机概念
进程:一个程序运行时,占用的全部计算机资源的总和
线程:程序执行流的最小单位,任何操作都是由线程完成的;线程是依托于进程存在的,一个进程可以包含多个线程;线程也可以有自己的计算资源
多线程:多个执行流同时运行,主要分为两种:其一CPU运算太快啦,分时间片——上下文切换(加载环境—计算—保存环境) 微观角度讲,一个核同一时刻只能执行一个线程;宏观的讲是多线程并发。其二,多CPU多核,可以独立工作,4核8线程——核指物理的核,线程指虚拟核
多线程三大特点:不卡主线程、速度快、无序性
Thread:C#语言对线程对象的封装
2.同步与异步
同步:完成计算之后,再进入下一行,会阻塞
异步:不会等待方法的完成,直接进入下一行,不会阻塞
3.不同C#版本线程的进化升级
C#1.0 | Thread | 线程等待、回调、前后台线程,可以扩展Thread封装回调,各种API函数很多,可设置线程优先级,各种API包括:Start(),Suspend(),Resume(),Abort(),Thread.ResetAbort(),Join(), |
C#2.0 | ThreadPool | 线程池使用,设置线程池,等待可用ManualResetEvent,砍掉了很多API,可以设置线程池的最大最小数量 |
C#3.0 | Task |
4.Task
引用using System.Threading C#3.0才有、基于ThreadPool
private void DoSomethingLong(string name) { Console.WriteLine($"****************DoSomethingLong {name} Start {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}***************"); long lResult = 0; for (int i = 0; i < 1000000000; i++) { lResult += i; } Console.WriteLine($"****************DoSomethingLong {name} End {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")} {lResult}***************"); }
1 Task.Run(() => this.DoSomethingLong("btnTask_Click1")); 2 Task.Run(() => this.DoSomethingLong("btnTask_Click2"));
TaskFactory taskFactory = Task.Factory;//4.0 taskFactory.StartNew(() => this.DoSomethingLong("btnTask_Click3"));
new Task(() => this.DoSomethingLong("btnTask_Click4")).Start();
以上三种启动方式并无区别,都是返回一个Task
以上是关于多线程——Task的主要内容,如果未能解决你的问题,请参考以下文章
JavaFX 多线程之 TaskServiceScheduledService
用Task多线程操作C#T4生成代码,抛出System.ObjectDisposedException: 已关闭 Safe handle