- 以前有学过一遍C#多线程编程实战,有些东西,很久不用,就容易忘记,在这里记录一下,重新再学习一遍。
- Task的介绍
- 对于C#中的多线程来说,最老的用法就是用Thread来编程,它提供了一系列的方法来方便操作该线程,但是,创建一个线程是一个昂贵的操作,它需要消耗一定的内存和性能,尤其是做一些很短时间的异步操作的时候,这样做是不划算的。而使用线程池中的线程就不再需要创建线程,只需要在池中获取一个,不再使用时再将它返回池中,它适合执行短期的异步操作,但是ThreadPool却相对于Thread少了大量的线程控制。
- 所以,在.Net Framework4.0中引入了Task,它允许使用线程池或者独立线程来工作,并且还提供了大量的方法来操作任务。
- Task的一般使用
- Task可以配合Lambda表达式来方便使用,一般用Task.Run方法来使用是最为便捷的,而如果这个任务需要长时间的运行,那么则需要通过TaskCreationOption.LongRunning来指定它是长时间运行的,因为一般不指定的话,Task是从ThreadPool中获取线程来执行的,但是线程池中的线程不适宜做长时间的任务,那么指定这个之后Task就会自己创建一个线程来运行任务,需要通过Task.Factory.StartNew()来执行。
- Task的ContinueWith用于在前一个任务完成后,接着执行后一个任务
static void Main(string[] args)
{
Task t1 = Task.Run(() =>
{
Console.WriteLine("任务一正在运行");
Thread.Sleep(1000);
});
t1.ContinueWith(t=> {
Console.WriteLine("任务一运行结束"); });
Console.Read();
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020091521253253.PNG#pic_center)
- Task.WaitAny和Task.WaitAll用于在调用处阻塞线程,等待一个或者所有任务执行完成。
static void Main(