詳解C#如何控制多線程同步執(zhí)行
寫在前面
使用Task類來(lái)控制多線程的同步執(zhí)行,可應(yīng)用于多任務(wù)分發(fā)執(zhí)行后,再做歸并處理。Tas既擁有線程池的優(yōu)點(diǎn),同時(shí)也解決了使用ThreadPool不易控制的弊端;可以非常簡(jiǎn)便并可靠地實(shí)現(xiàn)多線程的順序執(zhí)行。
代碼實(shí)現(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í)行結(jié)果

到此這篇關(guān)于詳解C#如何控制多線程同步執(zhí)行的文章就介紹到這了,更多相關(guān)C#多線程同步執(zhí)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(4)
這篇文章主要介紹了C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì),學(xué)習(xí)內(nèi)容是總結(jié)銷售信息的保存以及加載銷售信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-11-11
C#連接Oracle數(shù)據(jù)庫(kù)的多種方法總結(jié)
最近小項(xiàng)目當(dāng)中要使用C#來(lái)連接Oracle數(shù)據(jù)庫(kù)來(lái)完成系統(tǒng)的操作,這篇文章主要給大家介紹了關(guān)于C#連接Oracle數(shù)據(jù)庫(kù)的多種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
C#通過(guò)創(chuàng)建Windows服務(wù)啟動(dòng)程序的方法詳解
這篇文章主要介紹了C#通過(guò)創(chuàng)建Windows服務(wù)啟動(dòng)程序的方法,較為詳細(xì)的分析了C#創(chuàng)建Windows服務(wù)應(yīng)用程序的步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-06-06
C#的正則表達(dá)式Regex類使用簡(jiǎn)明教程
這篇文章主要介紹了C#的正則表達(dá)式Regex類使用簡(jiǎn)明教程,分別講解了如何匹配、如何獲取匹配次數(shù)、如何獲取匹配內(nèi)容及捕獲的方法,需要的朋友可以參考下2014-08-08
C#?PaddleOCRSharp?OCR進(jìn)行疲勞測(cè)試
PaddleOCRSharp?是百度飛槳封裝的.NET版本?OCR?dll?類庫(kù),OCR可以將圖像文件中的文本內(nèi)容進(jìn)行識(shí)別,下面我們就來(lái)看看如何通過(guò)它們實(shí)現(xiàn)疲勞測(cè)試吧2024-11-11
WinForm開發(fā)中屏蔽WebBrowser腳本錯(cuò)誤提示的方法
這篇文章主要介紹了WinForm開發(fā)中屏蔽WebBrowser腳本錯(cuò)誤提示的方法,在C#項(xiàng)目開發(fā)中比較實(shí)用,需要的朋友可以參考下2014-08-08

