m0S三元九运,九紫离火运-九紫运

#编程m0S三元九运,九紫离火运-九紫运

简述:m0S三元九运,九紫离火运-九紫运

Task和Thread都能创建用多线程的方式执行代码,但它们有较大的区别。m0S三元九运,九紫离火运-九紫运

Task是将多个操作封装成一个概念上原子操作。但这个操作由哪个Thread甚至多个Thread来处理处理你并不清楚。总之就是可以被正常完成。m0S三元九运,九紫离火运-九紫运

Thread仅仅是一条线程,所有操作都是这个Thread一个完成的。m0S三元九运,九紫离火运-九紫运

thread是单核多线程,task是多核多线程。m0S三元九运,九紫离火运-九紫运

Task较新,发布于.NET 4.5,能结合新的async/await代码模型写代码,它不止能创建新线程,还能使用线程池(默认)、单线程等方式编程,在UI编程领域,Task还能自动返回UI线程上下文,还提供了许多便利API以管理多个Task。用表格总结如下:m0S三元九运,九紫离火运-九紫运


m0S三元九运,九紫离火运-九紫运

区别TaskThread
.NET 版本4.5+1.1
async/await支持不支持
创建新线程支持支持
线程池/单线程支持不支持
返回主线程支持不支持
管理API支持不支持

一个Task ,Task.Run(()=>{.......;});m0S三元九运,九紫离火运-九紫运

开始一个Task最简单的办法就是使用Task.Run(.net4.5,4.0的时候是Task.Factory.StartNew)传入一个Action委托即可,代码示例:m0S三元九运,九紫离火运-九紫运

Task.Run( => { Console.WriteLine( "do it"); });m0S三元九运,九紫离火运-九紫运

  • Task默认使用线程池,也就是后台线程:当主线程结束时,你创建所有的tasks都会结束。m0S三元九运,九紫离火运-九紫运

  • Task.Run返回一个Task对象,可以使用它来监视其过程m0S三元九运,九紫离火运-九紫运

  • 在Task.Run之后,我们没有调用Start,因为该方法创建的是“热”任务(hot task)m0S三元九运,九紫离火运-九紫运

  • 可以通过task的构造函数创建“冷”任务(cold task),但开发中很少这么干m0S三元九运,九紫离火运-九紫运

  • 通过Task的Status属性来跟踪task的执行状态。m0S三元九运,九紫离火运-九紫运

以下是几个从视频授课里学的几种简便的多线程编程使用方式,
m0S三元九运,九紫离火运-九紫运

示例一:Thread用法m0S三元九运,九紫离火运-九紫运

Thread ts = new Thread(() => {m0S三元九运,九紫离火运-九紫运

                Thread.Sleep(3000);m0S三元九运,九紫离火运-九紫运

                MessageBox.Show("菜都做好了");m0S三元九运,九紫离火运-九紫运

            });m0S三元九运,九紫离火运-九紫运

            ts.Start();m0S三元九运,九紫离火运-九紫运

示例二:异步多线程,注:此方法是按顺序执行。
m0S三元九运,九紫离火运-九紫运

await Task.Run(() =>m0S三元九运,九紫离火运-九紫运

            {m0S三元九运,九紫离火运-九紫运

                Thread.Sleep(3000);m0S三元九运,九紫离火运-九紫运

                MessageBox.Show("素菜做好了");m0S三元九运,九紫离火运-九紫运

            });m0S三元九运,九紫离火运-九紫运

            await Task.Run(() =>m0S三元九运,九紫离火运-九紫运

            {m0S三元九运,九紫离火运-九紫运

                Thread.Sleep(3000);m0S三元九运,九紫离火运-九紫运

                MessageBox.Show("荤菜做好了");m0S三元九运,九紫离火运-九紫运

            });m0S三元九运,九紫离火运-九紫运

            MessageBox.Show("菜都做好了");m0S三元九运,九紫离火运-九紫运

示例三:异步多线程并行,注:线程集合内的线程以并行的方式同步执行。
m0S三元九运,九紫离火运-九紫运

List<Task> tsList = new List<Task>();m0S三元九运,九紫离火运-九紫运

            tsList.Add(Task.Run(() =>m0S三元九运,九紫离火运-九紫运

            {m0S三元九运,九紫离火运-九紫运

                Thread.Sleep(3000);m0S三元九运,九紫离火运-九紫运

                MessageBox.Show("素菜做好了");m0S三元九运,九紫离火运-九紫运

            }));m0S三元九运,九紫离火运-九紫运

            tsList.Add(Task.Run(() =>m0S三元九运,九紫离火运-九紫运

            {m0S三元九运,九紫离火运-九紫运

                Thread.Sleep(5000);m0S三元九运,九紫离火运-九紫运

                MessageBox.Show("荤菜做好了");m0S三元九运,九紫离火运-九紫运

            }));m0S三元九运,九紫离火运-九紫运

            Task.WhenAll(tsList).ContinueWith(t =>m0S三元九运,九紫离火运-九紫运

            {m0S三元九运,九紫离火运-九紫运

                MessageBox.Show("菜都做好了");m0S三元九运,九紫离火运-九紫运

            });m0S三元九运,九紫离火运-九紫运

m0S三元九运,九紫离火运-九紫运

m0S三元九运,九紫离火运-九紫运

声明:有的资源均来自网络转载,版权归原作者所有,如有侵犯到您的权益 请联系邮箱:123456@qq.com 我们将配合处理!

原文地址:C#多线程编程发布于2024-04-01 12:02:34

相关推荐