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

时间:2021-02-19 03:35:54

  最近在项目中需要用到多线程,考虑了一番,选择了ThreadPool,我的需求是要拿到线程执行方法的返回值,

但是ThreadPool.QueueUserWorkItem的回调方法默认是没有返回值的,搜了搜,都是简单介绍ThreadPool.QueueUserWorkItem的各种

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

  回调方法不带返回值,迂回一下,回调方法用对象的方法,返回值放在对象的属性中,在对象方法执行时将需要的返回值赋值给对应属性。

等所有线程执行完,循环对象列表,取回返回值,然后想怎么处理返回值就OK了。上代码: 

  封装对象:

 using System;
using System.Threading;
public class ThreadReturnData
{
public ManualResetEvent manual;
public string res; public void ReturnThreadData(object obj)
{
//线程耗时操作方法
res = DoSomething(obj);
manual.Set();
}
}

  多线程调用:

  List<ThreadReturnData> testList = new List<ThreadReturnData>();
IList<ManualResetEvent> arrManual = new List<ManualResetEvent>();
for (int i = ; i < i; i++)
{
ThreadReturnData temp = new ThreadReturnData();
temp.manual = new ManualResetEvent(false);
arrManual.Add(temp.manual);
ThreadPool.QueueUserWorkItem(new WaitCallback(temp.ReturnThreadData), i);
testList.Add(temp);
}
}
if (arrManual.Count > )
{
////等待所有线程执行完
WaitHandle.WaitAll(arrManual.ToArray());
}
foreach (ThreadReturnData d in testList)
{
d.res;
//todo
}