精品秘无码一区二区三区老师-精品秘一区二三区免费雷安-精品蜜桃秘一区二区三区-精品蜜桃秘一区二区三区粉嫩-精品蜜桃一区二区三区-精品蜜臀国产aⅴ一区二区三区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

.NET多線程編碼結合異步編碼示例

freeflydom
2025年1月16日 11:8 本文熱度 378

1、創建一個.NET8.0控制臺項目來演示多線程的應用

2、快速創建一個線程

3、多次運行程序,可以得到輸出結果

這就是多線程的特點 - 當多個線程并行執行時,它們的具體執行順序是不確定的,除非我們使用同步機制(如 lock、信號量等)來控制執行順序。

4、新建一個類TestThread,以及一個靜態的測試方法,用來做測試使用

5、在Program中,把輸出改成調用TestThread類中的測試方法再次執行測試一下

6、執行以后的輸出結果,如下圖所示

7、Thread.Sleep(毫秒):線程的等待(睡眠)


執行結果:

8、Thread.Join() 代表線程執行完畢以后,才可以繼續執行后續的代碼

如下圖所示,在thread線程內部執行完成以后,很快就接著執行最后的打印輸出方法了

9、Thread.Join(毫秒) 代表等待當前線程執行多長時間,如果超出設定的毫秒數,就會直接執行后續的代碼

運行程序,查看執行結果


1、新增Test2方法,用來測試線程池ThreadPool使用

2、WaitCallback也是一個委托,傳入需要在線程池內執行的方法名稱。以下代碼內,“線程池”字符串為要執行方法對應的參數

ThreadPool:
這是.NET中的線程池類
它維護著一組可重用的線程
比直接創建新線程更有效率
QueueUserWorkItem:
這個方法用于將工作項添加到線程池隊列中
線程池會自動分配空閑線程來執行這些工作項
WaitCallback:
這是一個委托類型
定義了線程池中的線程要執行的方法
可以接收一個 object 類型的參數
TestThread.Test2:
這是你定義的要在線程池中執行的方法
它有這樣的簽名:public static void Test2(object state)
"線程池":
這是傳遞給 Test2 方法的參數

3、除了直接傳入回調方法,也可以直接在線程池開啟的方法內,直接寫代碼塊來當做多線程執行的部分

4、線程池內,可以通過設置Manual信號量,來識別線程池內的線程什么時候執行完成。



**1、創建一個TestAsyncAction類,添加一個模擬的異步方法TestAction

2、使用Task快讀創建一個線程。最簡單的方法:Task.Run(()=>{ 代碼塊 })

3、兩個線程并行執行,查詢執行結果

4、如果想等待新開線程執行完再繼續執行后續的代碼,可以使用如下方式:使用 await 等待整個操作完成

await Task.Run(async () =>
{
   await TestAsyncAction.TestAction();
});
代碼會等待異步操作完成才繼續執行

執行結果:

5、也可以使用Task.Factory創建一個任務工廠來實現

6、查看執行結果


1、【異步結合多線程】如果有多個任務在執行期間,在任意一個線程執行完畢以后進行執行某種操作,可以使用 ContinueWhenAny來進行

// See https://aka.ms/new-console-template for more information
using MultiThreading;
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}>>>>Hello, World!");
var tasks = new Task[3];
TaskFactory factory = new();
/*
 * .Unwrap() 主要是用來處理嵌套任務問題。
 * 使用 StartNew 執行 async lambda 時,會得到一個 Task<Task> (雙層嵌套的Task)
 *          // 不使用 Unwrap
            var task1 = factory.StartNew(async () => {
                await Task.Delay(1000);
                return "Hello";
            });
            // task1 的類型是 Task<Task<string>>
            // 需要兩次 await
            string result1 = await (await task1);
    ---------------------------------------------------
            // 使用 Unwrap
            var task2 = factory.StartNew(async () => {
                await Task.Delay(1000);
                return "Hello";
            }).Unwrap();
            // task2 的類型是 Task<string>
            // 只需要一次 await
            string result2 = await task2;
 */
tasks[0] = factory.StartNew(async () =>
{
    await TestAsyncAction.AsyncAction1();
}).Unwrap();
tasks[1] = factory.StartNew(async () =>
{
    await TestAsyncAction.AsyncAction2();
}).Unwrap();
tasks[2] = factory.StartNew(async () =>
{
    await TestAsyncAction.AsyncAction3();
}).Unwrap();
_ = factory.ContinueWhenAny(tasks, x =>
{
    Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}>>>>正常代碼");
});
Console.ReadLine();//阻止程序退出
PS:如果后續代碼依賴于續聯任務的完成,使用 await
    如果不關心續聯任務何時完成,使用 _=

查看執行結果:

2、【異步結合多線程】如果要等任務全部執行完畢以后才執行某個代碼塊,可以使用ContinueWhenAll

查看執行結果:

PS// 可以使用 Task.WhenAny 替代 ContinueWhenAny
_ = Task.WhenAny(tasks).ContinueWith(t => {
    Console.WriteLine(">>>>正常代碼");
});

3、異步方法中 使用 WhenAll 和 WhenAny(這個僅模擬純IO操作,不涉及多線程)

  當遇到 await 時,當前方法會返回到調用者
  主線程可以繼續處理其他工作(比如UI響應處理其他事件等)
  這些任務會被放到線程池中執行
  當前方法內 await 后面的代碼會被打包成續接(continuation)
  這個續接會等待所有任務完成后才執行
  但這個等待是異步的,不會占用主線程資源
  • .WhenAll()

查看執行結果:

  • .WhenAny()

查看執行結果:

?轉自https://www.cnblogs.com/sq1201/p/18664227


該文章在 2025/1/16 11:08:48 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 人妻久久久久久精品99系列全集综艺天堂在线www | 性感美女视频在线观看一区二区 | 日韩欧美二区在线观看:最新热门影视剧集推荐 | 特黄A又粗又大黄又爽A片 | 成年女人a级毛片免费观看 成年女人a毛片免费视频 | 久久精品道一区二区三区 | 日日摸天天碰中文字幕 | 69av在线视频 | 阿娇不雅视频 | av线上免费观看 | 欧美午夜精品一区二区三区电影 | a级毛片免费观看在线播放 a级毛片免费完整视频 | 麻豆女神列表 | 免费无码又爽又刺激高潮视频 | 人妻系列无码专区久久五月天 | 中文日产幕无线码系列 | 国产成人免费视频精品 | 高清无码一区二区三区四区 | 性感美女视频在线观看一区二区 | 欧美精品久久96人妻无码 | 综合一区无套内射中文字幕 | 国产精品毛片AV在线看 | 亚洲av无码专区首页 | 17草视频在线免费看 | 亚洲高清毛片一区二区 | 亚洲经色片女人a黄色片 | 免费无码又爽又刺激高潮视频日本 | 亚洲国内自拍欧美一区二区三区 | 亚洲亚洲人成网站在线观看 | 亚洲国产精品免费视频 | 亚洲国产精品成人av无码久久综合 | 亚洲日韩精品无码av海量 | 亚洲妇女在现代城市街道上使用手机正版高清视频素材下载 | 色欲AV亚洲永久无码精品 | av永久高清中文字幕无码人妻一区二区 | 亚洲欧洲国产成人综合在线观看 | 亚洲高清av一区二区三 | 在线观看一区二区三区视频 | 伊人久久精品无码二区色欲 | 中文文字幕文字幕永久免费 | 亚洲av网站在线免费观看 |