1.概括
task任务在.net4.0出现的,是线程池基础上封装而来的,对Thread进行了优化提升。
2.Task基本用法
2.1创建一个Task任务
Task task=new Task(() =>
{
Console.WriteLine("创建任务1");
});task.Start();//启动任务
//带启动创建任务
Task.Run(() => {
Console.WriteLine("创建任务2");
});
//添加任务工厂自动进行任务管理,
Task.Factory.StartNew(() => {
Console.WriteLine("创建任务3");
});
2.2Task延迟等待
使用Task.Delay(100).Wait();方法等同于Thread.sleep(100);注意:Thread.sleep(100)是同步执行,Task.Delay(100)是异步执行不会造成当前线程阻塞,只有配合Wait()使用时达到与Thread.sleep(100)相同的效果
2.3Task取消任务
使用CancellationTokenSource类来控制Task任务的取消状态,使用cts.Cancel()改变任务状态为取消状态。
CancellationTokenSource cts = new CancellationTokenSource();
Task task=new Task(() =>
{
Console.WriteLine("创建一个可取消的任务");
},cts.Token);
task.start();
cts.Cancel();
已开始的任务取消后不会立即结束,仍会将任务执行完,先将任务取消再进行创建任务,此时任务不会被创建,task为null。cts.Token.IsCancellationRequested控制任务是否取消的状态;true为任务已取消。
2.4获取Task的id
在Task内部获取id使用Task.CurrentId获取id,在Task任务外部直接使用task.id获取id
Task task=new Task(() =>
{
Console.WriteLine("任务开启的线程id"+Task.CurrentId);
Task.Delay(2000).Wait();
},cts.Token);
task.Start();
Console.WriteLine("任务开启的线程id" + task.Id);