詳解C#如何控制多線程同步執(zhí)行
更新時間:2023年12月11日 09:12:39 作者:rjcql
使用Task類來控制多線程的同步執(zhí)行,可應用于多任務分發(fā)執(zhí)行后,這篇文章主要為大家詳細介紹了C#如何通過Task類控制多線程同步執(zhí)行,感興趣的小伙伴可以了解下
寫在前面
使用Task類來控制多線程的同步執(zhí)行,可應用于多任務分發(fā)執(zhí)行后,再做歸并處理。Tas既擁有線程池的優(yōu)點,同時也解決了使用ThreadPool不易控制的弊端;可以非常簡便并可靠地實現(xiàn)多線程的順序執(zhí)行。
代碼實現(xiàn)
public class ThreadTester { public static void ThreadTest01() { var task01 = new Task(() => { Thread.Sleep(1000); Console.WriteLine("task01 執(zhí)行完成"); }); // 以同步方式執(zhí)行 task01.RunSynchronously(); Console.WriteLine("第一階段主線程執(zhí)行完成"); var task02 = new Task(() => { Thread.Sleep(1300); Console.WriteLine("task02 執(zhí)行完成"); }); task02.Start(); var task03 = new Task(() => { Thread.Sleep(800); Console.WriteLine("task03 執(zhí)行完成"); }); task03.Start(); // 執(zhí)行等待以保證同步 task02.Wait(); task03.Wait(); Console.WriteLine("第二階段主線程執(zhí)行完成"); var task04 = new Task(() => { Thread.Sleep(1500); Console.WriteLine("task04 執(zhí)行完成"); }); task04.Start(); var task05 = new Task(() => { Thread.Sleep(600); Console.WriteLine("task05 執(zhí)行完成"); }); task05.Start(); // 執(zhí)行等待以保證同步 Task.WaitAll(new Task[] { task04, task05 }); Console.WriteLine("第三階段主線程執(zhí)行完成"); var task06 = new Task(() => { Thread.Sleep(1200); Console.WriteLine("task06 執(zhí)行完成"); }); task06.Start(); var task07 = new Task(() => { Thread.Sleep(100); Console.WriteLine("task07 執(zhí)行完成"); }); task07.Start(); // 全部完成后再執(zhí)行 Task.WhenAll(new Task[] { task06, task07 }).ContinueWith((t) => { Thread.Sleep(200); Console.WriteLine("第四階段最后完成"); }); Console.WriteLine("第四階段主線程執(zhí)行完成"); Console.ReadKey(); } }
執(zhí)行結果
到此這篇關于詳解C#如何控制多線程同步執(zhí)行的文章就介紹到這了,更多相關C#多線程同步執(zhí)行內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#通過創(chuàng)建Windows服務啟動程序的方法詳解
這篇文章主要介紹了C#通過創(chuàng)建Windows服務啟動程序的方法,較為詳細的分析了C#創(chuàng)建Windows服務應用程序的步驟與相關注意事項,需要的朋友可以參考下2016-06-06WinForm開發(fā)中屏蔽WebBrowser腳本錯誤提示的方法
這篇文章主要介紹了WinForm開發(fā)中屏蔽WebBrowser腳本錯誤提示的方法,在C#項目開發(fā)中比較實用,需要的朋友可以參考下2014-08-08