.NET多線程編碼結(jié)合異步編碼示例
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
1、創(chuàng)建一個(gè).NET8.0控制臺(tái)項(xiàng)目來演示多線程的應(yīng)用 2、快速創(chuàng)建一個(gè)線程 3、多次運(yùn)行程序,可以得到輸出結(jié)果 這就是多線程的特點(diǎn) - 當(dāng)多個(gè)線程并行執(zhí)行時(shí),它們的具體執(zhí)行順序是不確定的,除非我們使用同步機(jī)制(如 lock、信號(hào)量等)來控制執(zhí)行順序。 4、新建一個(gè)類TestThread,以及一個(gè)靜態(tài)的測(cè)試方法,用來做測(cè)試使用 5、在Program中,把輸出改成調(diào)用TestThread類中的測(cè)試方法再次執(zhí)行測(cè)試一下 6、執(zhí)行以后的輸出結(jié)果,如下圖所示 7、Thread.Sleep(毫秒):線程的等待(睡眠) 執(zhí)行結(jié)果: 8、Thread.Join() 代表線程執(zhí)行完畢以后,才可以繼續(xù)執(zhí)行后續(xù)的代碼 如下圖所示,在thread線程內(nèi)部執(zhí)行完成以后,很快就接著執(zhí)行最后的打印輸出方法了 9、Thread.Join(毫秒) 代表等待當(dāng)前線程執(zhí)行多長(zhǎng)時(shí)間,如果超出設(shè)定的毫秒數(shù),就會(huì)直接執(zhí)行后續(xù)的代碼 運(yùn)行程序,查看執(zhí)行結(jié)果 1、新增Test2方法,用來測(cè)試線程池ThreadPool使用 2、WaitCallback也是一個(gè)委托,傳入需要在線程池內(nèi)執(zhí)行的方法名稱。以下代碼內(nèi),“線程池”字符串為要執(zhí)行方法對(duì)應(yīng)的參數(shù)
3、除了直接傳入回調(diào)方法,也可以直接在線程池開啟的方法內(nèi),直接寫代碼塊來當(dāng)做多線程執(zhí)行的部分 4、線程池內(nèi),可以通過設(shè)置Manual信號(hào)量,來識(shí)別線程池內(nèi)的線程什么時(shí)候執(zhí)行完成。 **1、創(chuàng)建一個(gè)TestAsyncAction類,添加一個(gè)模擬的異步方法TestAction 2、使用Task快讀創(chuàng)建一個(gè)線程。最簡(jiǎn)單的方法:Task.Run(()=>{ 代碼塊 }) 3、兩個(gè)線程并行執(zhí)行,查詢執(zhí)行結(jié)果 4、如果想等待新開線程執(zhí)行完再繼續(xù)執(zhí)行后續(xù)的代碼,可以使用如下方式:使用 await 等待整個(gè)操作完成
執(zhí)行結(jié)果: 5、也可以使用Task.Factory創(chuàng)建一個(gè)任務(wù)工廠來實(shí)現(xiàn) 6、查看執(zhí)行結(jié)果 1、【異步結(jié)合多線程】如果有多個(gè)任務(wù)在執(zhí)行期間,在任意一個(gè)線程執(zhí)行完畢以后進(jìn)行執(zhí)行某種操作,可以使用 ContinueWhenAny來進(jìn)行
查看執(zhí)行結(jié)果: 2、【異步結(jié)合多線程】如果要等任務(wù)全部執(zhí)行完畢以后才執(zhí)行某個(gè)代碼塊,可以使用ContinueWhenAll 查看執(zhí)行結(jié)果:
3、異步方法中 使用 WhenAll 和 WhenAny(這個(gè)僅模擬純IO操作,不涉及多線程)
查看執(zhí)行結(jié)果:
查看執(zhí)行結(jié)果: ?轉(zhuǎn)自https://www.cnblogs.com/sq1201/p/18664227 該文章在 2025/1/16 11:08:48 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |