Task用法小记

闲来无事

学点新知识

之前就看过Task见过类似的用法

就是没有特意的去了解这个类

今天来了解下顺便记个笔记、、、

本质

Task是一个类,它是基于任务的异步模式而产生的

首次引入在Framework 4中

看到这里你一定会想到多线程Thread与线程池ThreadPool

而Task跟线程池的功能是很相似的

当我们用Task开启新任务的时候,系统会从线程池中调用线程

而Thread会在每次实例化的时候创建一个新的线程

如果你需要一个长时间的操作,请使用Task(Acton,TaskCreationOptions)构造函数中的 TaskCreationOptions.LongRunning,暗示任务调度器,将这个线程放在非线程池上执行

Task的启动方式

Start

New Task(Action)

Run

Task.Run(Action)

具有返回值的Task

Task.Run<T>(Action)

Factory

Task.Factory.StartNew(Action)

Task中的wait

基本用法

默认情况下,Task 是有线程池中的异步线程执行

是否执行完成,可以通过Task的的属性IsCompleted 来判断

如果想在子线程工作完成之后,在进行后续主线程工作可以通过调用task.Wait() 来等待线程完成

调用Wait后,当前线程会被阻塞,直到到子线程完成

运行结果:

image

具有等待时间的Wait

运行结果:

image

参与评论

游客评论不支持回复他人评论内容,如需回复他人评论内容请