新手淺談Task異步編程和Thread多線程編程


初學Task的時候上網搜索,看到很多文章的標題都是task取代thread等等相關,我也一直以為task和thread是一類,其實task是.net4.0提出的異步編程,在之前.net1.0有delegete.beginInoke(XXXX),還有.net2.0中的EAP,在最新的4.5中又有async、await這種新的異步編程。而Thread和Threadpool則是多線程編程。

  

但是Task也是把任務推到線程池中

 1         static void Main(string[] args)
 2         {
 3             for(int i=0;i<5;i++)
 4             {
 5                 var task1 = Task.Factory.StartNew(() => Run());
 6                 var task2 = Task.Factory.StartNew(() => Run());
 7                 var task3 = Task.Factory.StartNew(() => Run());
 8                 var task4 = Task.Factory.StartNew(() => Run());
 9             }
10             Console.ReadKey();
11         }
12 
13         static void Run()
14         {
15             Thread.Sleep(100);
16             Console.WriteLine("TaskId:{0} ThreadId:{1}", Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
17         }

運行的結果為:

Task和Threadpool相比,Task能獲取返回值、有更多的控制等,Threadpool占用的資源較小,如果只需要把任務丟到線程池中,其他的都不管的話,就建議使用Threadpool。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM