<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何提取 Thread 中返回值?

          共 1789字,需瀏覽 4分鐘

           ·

          2021-11-12 01:54


          咨詢區(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?開始,你可以通過 Task 的方式開啟 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?開始, 你可以使用?await,async?的方式替代 Task 的 Result 屬性,參考如下代碼:


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

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

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

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



          往期精彩回顧




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

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

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

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

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

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

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

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

          現(xiàn)身說法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(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)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本色电影在线观看 | 天堂在线无码视频 | 日本黄色视频免费 | 欧美第一网站 | 亚洲久久成人 |