C#ThreadPool.QueueUserWorkItem实例「建议收藏」

C#ThreadPool.QueueUserWorkItem实例「建议收藏」今天学习线程池的时候发现,网上能搜到的都是很久以前的文档了,大家都是照搬过去,有没有考证都是问题。经过测试结果已经和他们说的不一样了,比如 Listactions=newList(){()=>{Console.WriteLine(“A-1”);},()=>{Conso

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

今天学习线程池的时候发现,网上能搜到的都是很久以前的文档了,大家都是照搬过去,有没有考证都是问题。

经过测试结果已经和他们说的不一样了,比如

<span style="white-space:pre">	</span>    List<Action> actions = new List<Action>()
            {
                () => { Console.WriteLine("A-1"); },
                () => { Console.WriteLine("A-2"); },
                () => { Console.WriteLine("A-3"); },
                () => { Console.WriteLine("A-4"); }
            };
            foreach (var action in actions)
            {
                ThreadPool.QueueUserWorkItem(state => action(), null);
                
            }

输出的结果网上流传的是

A-4

A-4

A-4

A-4

大概就这个了

现在我用VS2012运行后的结果已经不是这样的了,虽然顺序每次都不一样,但是4个结果都会输出

A-2

A-3

A-1

A-4

大概这个一样的。

同样的代码,出现不同的结果,应该是foreach底层代码不同的原因,还没有去考证。

当然,如果我们用for循环的话,结果就又不一样了

比如写成

 for (int i = 0; i < actions.Count; i++)
 {
    ThreadPool.QueueUserWorkItem(state => actions[i](), null);
 }

大概很多人觉得没问题,其实会出现超出索引的错误,原因是开启线程池需要时间,还没有开启成功的时候 for循环已经执行完了,这个时候,开启的线程池又去调用索引i指向的函数,而for循环执行完以后,i的最后值为4,不是3.所以超出索引。

写成

for (int i = 0; i < actions.Count-1; i++)
 {
        ThreadPool.QueueUserWorkItem(state => actions[i](), null);
 }

执行后的结果是

C#ThreadPool.QueueUserWorkItem实例「建议收藏」

如果想要4个函数按顺序执行,一种可以在主线程中等待一段时间在执行下一个,第二中可以通过ThreadPool.SetMaxThreads 和ThreadPoolMinThreads,控制线程池中线程的可执行的线程个数来实现。不知道这样做是否合理。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189953.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • origin如何在柱状图上面显示数据_origin柱状图横坐标自定义

    origin如何在柱状图上面显示数据_origin柱状图横坐标自定义经验:Origin做柱状图常遇问题/柱状图X坐标轴如何设置—小技巧对于每个搞科研的人来说,origin这个作图软件是必不可少的!但是,对于新手来说(我也算是半个新手*^__^*),它有时候显得有点高深,不知道该如何设置。就拿这次来说吧,同门要画一个性能随含量变化的柱状图(希望大体效果希望如上图,上图还没完全设置好),但是不知道该如何设置X坐标轴,因为含量的变化区间不是固定的,例如10%,20%,4…

    2022年9月30日
    0
  • Microsoft Visual Studio 2010 简体中文旗舰版下载「建议收藏」

    Microsoft Visual Studio 2010 简体中文旗舰版下载「建议收藏」听说MSDN放出了MicrosoftVisualStudio2010简体中文旗舰版,怀着激动的心情下载安装。下面是下载地址如果有MSDN订阅账号的话可以去https://msdn.microsoft.com/zh-cn/subscriptions/securedownloads/default.aspx如果没有可以使用下面的地址下载,这里感谢前人的分享ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4

    2022年7月20日
    16
  • c语言图书管理系统出现的问题,C语言图书管理系统中的问题「建议收藏」

    c语言图书管理系统出现的问题,C语言图书管理系统中的问题「建议收藏」系统使用细分的功能模块c语言图书管理系统,分别在main.c文件中调用.开发环境为Win7,Netbeans8.0.2这是main.c#include#include#include#include“bmenu.h”#include“search_allinformation.h”typedefstructbookinfo{字符数[20];/*书号*/字符名称[40];/*书…

    2022年10月11日
    0
  • ClientHeight_offsetheight获取高度不对

    ClientHeight_offsetheight获取高度不对clientHeight:包括padding但不包括border、水平滚动条、margin的元素的高度。对于inline的元素这个属性一直是0,单位px,只读元素。offsetHeight:包括padding、border、水平滚动条,但不包括margin的元素的高度。对于inline的元素这个属性一直是0,单位px,只读元素。style.height//返回元素的高度(包括元素高度,不包括内边距、边框和外边距)clientHeight//返回元素的高度(包括元素高度、

    2022年9月11日
    0
  • Filter及FilterChain的使用具体解释

    Filter及FilterChain的使用具体解释

    2021年12月9日
    53
  • 新手学robotium-robotium初探

    新手学robotium-robotium初探这个月正式开始robotium的学习,生命不止,学习不止。作为一个初学者的我,尝试完了monkey跟monkeyrunner之后,严重意识到移动端也有更加高深的测试艺术。借用其他文章的话来说,这不仅是

    2022年7月1日
    20

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号