创建Task
1.new方式实例化一个Task,需要通过Start方法启动
Task task = new Task(() =>
{
Thread.Sleep(100);
Console.WriteLine($"hello, task1的线程ID为{Thread.CurrentThread.ManagedThreadId}");
});
task.Start();
2.Task.Factory.StartNew(Action action)创建和启动一个Task
Task task2 = Task.Factory.StartNew(() =>
{
Thread.Sleep(100);
Console.WriteLine($"hello, task2的线程ID为{ Thread.CurrentThread.ManagedThreadId}");
});
3.Task.Run(Action action)将任务放在线程池队列,返回并启动一个Task
Task task3 = Task.Run(() =>
{
Thread.Sleep(100);
Console.WriteLine($"hello, task3的线程ID为{ Thread.CurrentThread.ManagedThreadId}");
});
task.Status
TaskStatus 枚举
Task对象的状态,可以查看当前task对象是在什么状态
task.Wait
Task对象的Wait方法会阻塞主线程,不让主线程继续执行,等当前的task对象完成了才继续
Task.WaitAll
Task
如果Task任务有返回值,返回类型就是Task的繁星类型。用Task对象的Result取返回类型的值
Task<string> task1 = new Task<string>(() =>
{
Thread.Sleep(1000);
return "哈哈哈";
});
task1.Start();
Console.WriteLine(task1.Result);
连续任务
如果一个任务的执行依赖于另一个任务,即任务的执行有先后顺序。此时,我们可以使用连续任务。
task.ContinueWith(ReadNews)表示一个任务task结束后,才开始执行另一个任务。
static void Main(string[] args)
{
Task t1 = new Task(() =>
{
Thread.Sleep(1000);
Console.WriteLine("哈哈哈");
});
Task t2 = t1.ContinueWith(A);
Task t3 = t2.ContinueWith(B);
t1.Start();
Console.ReadKey();
}
static void A(Task odj)
{
Thread.Sleep(1000);
Console.WriteLine("呵呵呵");
}
static void B(Task odj)
{
Thread.Sleep(1000);
Console.WriteLine("嘿嘿嘿");
}
//打印结果
//哈哈哈
//呵呵呵
//嘿嘿嘿