最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#利用異步委托實(shí)現(xiàn)獲取線程返回值

 更新時(shí)間:2023年12月13日 09:24:32   作者:rjcql  
一般來說,異步委托主要用于解決 ThreadPool.QueueUserWorkItem 沒有提供獲取線程執(zhí)行完成后的返回值問題,下面我們就來學(xué)習(xí)一下C#如何利用異步委托實(shí)現(xiàn)獲取線程返回值吧

寫在前面

異步委托主要用于解決 ThreadPool.QueueUserWorkItem 沒有提供獲取線程執(zhí)行完成后的返回值問題。異步委托只能在.Net Framework 框架下使用,.Net Core中會(huì)報(bào)平臺(tái)錯(cuò)誤,而且使用Task.Result來獲取返回值,可以達(dá)成同樣的目的;本文純粹是做個(gè)驗(yàn)證試驗(yàn)。

代碼實(shí)現(xiàn)

        static void Main(string[] args)
        {
            AsyncResultTest();
            Console.WriteLine("OK");
            Console.ReadKey();
        }
 
        public static void AsyncResultTest()
        {
            var str = "hello";
            var testOb = new TestOb() { msg = str };
            Func<TestOb, int> testMethod = Dosomething;
            //testMethod.BeginInvoke(testOb, Done, testMethod);
            var asyncResult = testMethod.BeginInvoke(testOb, null, null);
            var task01 = Task.Factory.StartNew(() =>
            {
                Thread.Sleep(1000);
                testOb.msg = "hello world";
                Console.WriteLine($"task01 exceuted str is {testOb.msg}");
            });
            task01.Wait();
            var result = testMethod.EndInvoke(asyncResult);
            Console.WriteLine($"AsyncResultTest finished, result is {result}");
        }
 
        private static int Dosomething(TestOb testOb)
        {
            Console.WriteLine($"Dosomething:{testOb.msg}");
            Thread.Sleep(2000);
            return testOb.msg.Length;
        }
 
        private static void Done(IAsyncResult result)
        {
            var asyncState = (Func<TestOb, int>)result.AsyncState;
            var retVal = asyncState.EndInvoke(result);
            Console.WriteLine($"result is:{retVal}");
        }
 
        class TestOb
        {
            public string msg { get; set; }
        }

執(zhí)行結(jié)果

.Net Core 下實(shí)現(xiàn)類似效果的代碼:

        public static void TaskReturnValueTest()
        {
            var value = "000";
            var task01 = Task.Factory.StartNew(() =>
            {
                value = "111";
                Thread.Sleep(1000);
                Console.WriteLine($"task01 exceuted value is {value}.");
                return "1";
            });
            var task02 = Task.Factory.StartNew(() =>
            {
                Thread.Sleep(800);
                value = "222";
                Console.WriteLine($"task02 exceuted value is {value}.");
                return "2";
            });
            Task.WaitAll(task01, task02);
            var ret01 = task01.Result;
            var ret02 = task02.Result;
            Console.WriteLine($"task01: {ret01}, task02: {ret02}");
            Console.WriteLine("Ok");
        }

執(zhí)行結(jié)果: 

總結(jié) 

用Task類庫的代碼實(shí)現(xiàn)方式明顯更優(yōu),更易于理解和維護(hù)。

到此這篇關(guān)于C#利用異步委托實(shí)現(xiàn)獲取線程返回值的文章就介紹到這了,更多相關(guān)C#獲取線程返回值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中標(biāo)準(zhǔn)的IDispose模式代碼詳解

    C#中標(biāo)準(zhǔn)的IDispose模式代碼詳解

    在本篇文章中小編給大家分享的是關(guān)于C#中標(biāo)準(zhǔn)的IDispose模式的實(shí)例用法相關(guān)內(nèi)容,有需要的朋友們測試下。
    2019-09-09
  • 基于C#實(shí)現(xiàn)文本讀取的常用方式詳解

    基于C#實(shí)現(xiàn)文本讀取的常用方式詳解

    本文詳細(xì)介紹了在C#開發(fā)中使用七種不同的方式來讀取文件,包括FileStream配合Read方法,逐字節(jié)讀取,File類的ReadAllText,StreamReader逐行讀取和一次性讀取等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-04-04
  • C#實(shí)現(xiàn)給定字符串生成MD5哈希的方法

    C#實(shí)現(xiàn)給定字符串生成MD5哈希的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)給定字符串生成MD5哈希的方法,涉及C#操作字符串的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 如何利用C#正則表達(dá)式判斷是否是有效的文件及文件夾路徑

    如何利用C#正則表達(dá)式判斷是否是有效的文件及文件夾路徑

    項(xiàng)目中少不了讀取或設(shè)置文件路徑的功能,如何才能對輸入的路徑是否合法進(jìn)行判斷呢?下面這篇文章主要給大家介紹了關(guān)于C#利用正則表達(dá)式判斷是否是有效的文件及文件夾路徑的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • c# 如何使用結(jié)構(gòu)體實(shí)現(xiàn)共用體

    c# 如何使用結(jié)構(gòu)體實(shí)現(xiàn)共用體

    這篇文章主要介紹了c# 如何使用結(jié)構(gòu)體實(shí)現(xiàn)共用體,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • 10個(gè)被低估的C#性能優(yōu)化技巧分享

    10個(gè)被低估的C#性能優(yōu)化技巧分享

    這篇文章主要為大家詳細(xì)介紹了10個(gè)被低估的C#性能優(yōu)化技巧,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以參考一下
    2025-03-03
  • C# DateTime日期比較方法案例詳解

    C# DateTime日期比較方法案例詳解

    這篇文章主要介紹了C# DateTime日期比較方法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#常用多線程(線程同步,事件觸發(fā),信號量,互斥鎖,共享內(nèi)存,消息隊(duì)列)

    C#常用多線程(線程同步,事件觸發(fā),信號量,互斥鎖,共享內(nèi)存,消息隊(duì)列)

    這篇文章主要介紹了C#常用多線程(線程同步,事件觸發(fā),信號量,互斥鎖,共享內(nèi)存,消息隊(duì)列),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Unity?UGUI的Dropdown下拉菜單組件使用詳解

    Unity?UGUI的Dropdown下拉菜單組件使用詳解

    這篇文章主要為大家介紹了Unity?UGUI的Dropdown下拉菜單組件使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • C#/.net程序調(diào)用Python的教程分享

    C#/.net程序調(diào)用Python的教程分享

    C#的優(yōu)勢在于window下的開發(fā),不僅功能強(qiáng)大而且開發(fā)周期短。而python則有眾多的第三方庫,可以避免自己造輪子,利用C#來做界面,而具體實(shí)現(xiàn)使用python來實(shí)現(xiàn)可以大大提高開發(fā)效率。本文介紹如何使用pythonnet來執(zhí)行python腳本,希望對大家有所幫助
    2023-03-03

最新評論

门源| 双鸭山市| 隆尧县| 达孜县| 德兴市| 洛浦县| 鹿泉市| 定日县| 育儿| 视频| 仲巴县| 石泉县| 襄城县| 鹿邑县| 长汀县| 通州区| 信丰县| 阿拉善左旗| 湖南省| 定远县| 焉耆| 伊宁县| 铅山县| 麟游县| 土默特左旗| 郓城县| 沂南县| 界首市| 万山特区| 屏边| 香格里拉县| 兰考县| 儋州市| 沐川县| 聊城市| 河北区| 安西县| 桐城市| 航空| 星子县| 纳雍县|