1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        如何提取 Thread 中返回值?

        共 1789字,需瀏覽 4分鐘

         ·

        2021-11-12 01:54


        咨詢(xún)區(qū)

        • Asad

        如何獲取 Thread 中的返回值?

        回答區(qū)

        • Igor Bendrup

        關(guān)于如何獲取?Thread?中的返回值,不同的版本有不同的解決方案。

        1. .NET 2.0+

        你可以直接使用 Thread 對(duì)象,然后你可以使用閉包(聲明變量并在 lambda 中捕獲它),參考如下代碼:


        object?result?=?null;
        Thread?thread?=?new?System.Threading.Thread(()?=>?{?
        ????//Some?work...
        ????result?=?42;?});
        thread.Start();
        thread.Join();
        Console.WriteLine(result);

        也可以使用?IAsyncResult?然后在?EndInvoke()?方法中獲取返回值。


        delegate?object?MyFunc();
        ...
        MyFunc?x?=?new?MyFunc(()?=>?{?
        ????//Some?work...
        ????return?42;?});
        IAsyncResult?asyncResult?=?x.BeginInvoke(null,?null);
        object?result?=?x.EndInvoke(asyncResult);

        還可以使用傳統(tǒng)的?BackgroundWorker,然后在 RunWorkerCompleted ?事件中捕獲。


        BackgroundWorker?worker?=?new?BackgroundWorker();
        worker.DoWork?+=?(s,?e)?=>?{
        ????//Some?work...
        ????e.Result?=?42;
        };
        worker.RunWorkerCompleted?+=?(s,?e)?=>?{
        ????//e.Result?"returned"?from?thread
        ????Console.WriteLine(e.Result);
        };
        worker.RunWorkerAsync();

        1. .NET 4.0 +

        從?.NET 4.0?開(kāi)始,你可以通過(guò) Task 的方式開(kāi)啟 Thread,如果想獲取返回值可以提取?Task?中的 Result,參考如下代碼:


        //Main?thread?will?be?blocked?until?task?thread?finishes
        //(because?of?obtaining?the?value?of?the?Result?property)
        int?result?=?Task.Factory.StartNew(()?=>?{
        ????//Some?work...
        ????return?42;}).Result;

        1. .NET 4.5 +

        從?.NET 4.5?開(kāi)始, 你可以使用?await,async?的方式替代 Task 的 Result 屬性,參考如下代碼:


        int?result?=?await?Task.Run(()?=>?{
        ????//Some?work...
        ????return?42;?});

        我個(gè)人建議,最好用 Task 來(lái)替代傳統(tǒng) Thread 所做的事情。

        點(diǎn)評(píng)區(qū)

        Igor Bendrup?大佬列出了?7-8?種如何獲取線(xiàn)程的返回值太全了,學(xué)習(xí)了。



        往期精彩回顧




        【推薦】.NET Core開(kāi)發(fā)實(shí)戰(zhàn)視頻課程?★★★

        .NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門(mén)篇-開(kāi)篇及總體規(guī)劃

        【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開(kāi)篇及目錄索引

        Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)

        .NET Core中的一個(gè)接口多種實(shí)現(xiàn)的依賴(lài)注入與動(dòng)態(tài)選擇看這篇就夠了

        10個(gè)小技巧助您寫(xiě)出高性能的ASP.NET Core代碼

        用abp vNext快速開(kāi)發(fā)Quartz.NET定時(shí)任務(wù)管理界面

        在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度

        現(xiàn)身說(shuō)法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢(xún)優(yōu)化

        關(guān)于C#異步編程你應(yīng)該了解的幾點(diǎn)建議

        C#異步編程看這篇就夠了


        瀏覽 107
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            精品裸体秀hd | 女邻居张开腿让我爽了一夜动态图 | 吴梦梦性48式在线观看 | 波多野结衣电影av | 嫩草乱码一区三区四区 | 亚洲最大黄网 | 久久人人爽人人人人片 | 岳被蹂躏得求饶小说 | 午夜天堂精品久久久久91 | 日韩免费无码电影 |