C#線程池ThreadPool.QueueUserWorkItem接收線程執行的方法返回值


  最近在項目中需要用到多線程,考慮了一番,選擇了ThreadPool,我的需求是要拿到線程執行方法的返回值,

但是ThreadPool.QueueUserWorkItem的回調方法默認是沒有返回值的,搜了搜,都是簡單介紹ThreadPool.QueueUserWorkItem的各種

用法,只能自己想辦法了。

  回調方法不帶返回值,迂回一下,回調方法用對象的方法,返回值放在對象的屬性中,在對象方法執行時將需要的返回值賦值給對應屬性。

等所有線程執行完,循環對象列表,取回返回值,然后想怎么處理返回值就OK了。上代碼: 

  封裝對象:

 1 using System;
 2 using System.Threading;
 3  public class ThreadReturnData
 4     {
 5         public ManualResetEvent manual;
 6         public string res;
 7 
 8         public void ReturnThreadData(object obj)
 9         {
10             //線程耗時操作方法
11             res = DoSomething(obj);
12              manual.Set();
13         }
14     }

  多線程調用:

 1  List<ThreadReturnData> testList = new List<ThreadReturnData>();
 2 IList<ManualResetEvent> arrManual = new List<ManualResetEvent>();
 3 for (int i = 0; i < i; i++)
 4                     {
 5                             ThreadReturnData temp = new ThreadReturnData();
 6                             temp.manual = new ManualResetEvent(false);
 7                             arrManual.Add(temp.manual);
 8                             ThreadPool.QueueUserWorkItem(new WaitCallback(temp.ReturnThreadData), i);
 9                             testList.Add(temp);
10                         }
11                     }
12                     if (arrManual.Count > 0)
13                     {
14                         ////等待所有線程執行完
15                         WaitHandle.WaitAll(arrManual.ToArray());
16                     }
17  foreach (ThreadReturnData d in testList)       
18  {
19 d.res;
20 //todo
21 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM