最近在项目中需要用到多线程,考虑了一番,选择了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 }

转载于:https://www.cnblogs.com/yetiea/p/3361925.html

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

  1. C#.Net使用线程池(ThreadPool)与专用线程(Thread)

    线程池(ThreadPool)使用起来很简单,但它有一些限制: 1. 线程池中所有线程都是后台线程,如果进程的所有前台线程都结束了,所有的后台线程就会停止.不能把入池的线程改为前台线 程. 2. 不能 ...

  2. .net mvc actionresult 返回字符串_072-SpringMVC后端控制器接收参数、处理器方法返回值类型、拦截器、文件上传下载...

    1. 注解式开发之annotation-driven解释 (1) mvc注解驱动在哪个文件中配置? 在springmvc中配置 (2) 配置mvc注解驱动使用哪个标签? 2. 注解式开发之视图解析器 ...

  3. C# 线程池ThreadPool

    什么是线程池?为什么要用线程池?怎么用线程池? 1. 什么是线程池? .NET Framework的ThreadPool类提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 I/O.代表其他 ...

  4. 线程池(ThreadPool)

    线程池ThreadPool 1.线程池简介 2.线程池参数说明(重点) 2.1 常用参数说明 2.2 拒绝策略(重点) 3.线程池底层工作原理 4.入门案例 1.线程池简介   线程池(英语:thre ...

  5. [C#]获得线程池中活动的线程数

    在C#中的线程池ThreadPool没有获得线程池中的活动线程数量的属性或者是方法,但是有一两个 方法可以帮助获得活动线程数. 这两个方法分别是:GetMaxThreads和GetAvailableT ...

  6. C# 多线程 线程池(ThreadPool) 2 如何控制线程池?

    线程池启动了,但是没有方法去控制线程池,如果子线程出现了问题,难道线程池就死了吗? 我们可以设置线程池的线程数量,进行加入任务,线程池会自动分配并且合理的执行,但是控制不了又有啥意思呢. 线程池里线程 ...

  7. 【ElasticSearch】es 线程池 ThreadPool 的封装

    文章目录 1.概述 2.线程池在何时初始化 3.构建线程池框架 3.1 初始化ExecutorBuilder集合 3.1.1 构造函数 3.1.1.1 普通操作的Executor 3.1.1.2 索引 ...

  8. 手撕线程池 ThreadPool

    为了更加方便理解线程池 我们都知道线程池和任务就好比生产者消费者之间的关系也就是如图! 先分析:我们可以将线程池中的线程看作消费者,可以将main(只是方便测试)看作生产者 总体思路: 实现一个阻塞队 ...

  9. 深入剖析JDK线程池ThreadPool

    前言 线程池是java人员在工作中经遇到的一个技术,也是一个技术难点,最近遇到一个生产环境线程池使用问题,今天特针对源码和平时的工作经验,对ThreadPoolExecutor进行一个全面的剖析 1. ...

最新文章

  1. 《大数据存储:MongoDB实战指南》一1.1 什么是大数据
  2. 为什么我们总是喜欢选择差不多的价格
  3. 大数据之路:阿里巴巴大数据实践,附339页PPT下载
  4. 华为云自研PB级分布式时序数据库揭秘第一期:初识GaussDB(for Influx)
  5. k8s ready 不调度_【零基础学云计算】k8s部署---master节点组件部署(三)
  6. LINUX其他重要服务
  7. QQ浏览器下拉词推广是什么?
  8. PHP把列表数据的子级内容合并到父级
  9. MediaCreationTool.bat操作手册
  10. node 项目打包部署至服务器
  11. 如何做出 胜过 万龙洲海鲜的 双味腊肠芋头煲
  12. 关于DFU 烧录更新image
  13. egret的eui以及exml使用
  14. 三步为你的 Mac 设置黑客帝国矩阵屏保
  15. 【算法】机器人走迷宫(适用于走迷宫、最短路径算法)-20200412
  16. H3C系列交换机系统版本升级及导入配置
  17. kubeflow--安装使用pipeline
  18. linux内核编程,实现内核之间的调用
  19. 【ParaView教程】第二章 基本使用
  20. 中国企业“战略迷失悲剧”逼近高发期--中国房地产企业即将迎来倒闭潮

热门文章

  1. SNL文法的递归下降语法分析器
  2. window jdk6,7,8 绿色解压包
  3. 冲动是魔鬼—情绪十大格言
  4. Android仿照淘宝,京东,当当购物平台
  5. SparkSQL实战小项目之热门商品top3
  6. QMap 和 QHash容器
  7. 关于D3D的学习和个人理解-1
  8. Typora 精美而强大的Markdown编辑器 转
  9. 贪心算法——数轴距离模型(货仓选址,邮局安排,糖果传递)
  10. ui设计范畴有什么麓言信息