net异步线程注意事项
某人(不是我写的)写的异步代码;(还请博友们点评哈~)
AsyncEventHandler[] asy = new AsyncEventHandler[ResultCount];
IAsyncResult[] asyncResult = new IAsyncResult[ResultCount];
for (int j = ; j < matchedJobs.Length; j++)
{
asy[j] = ThreadJobs;
asyncResult[j] = asy[j].BeginInvoke(dataCollection, matchedJobs[j], jobResults, sLotStepSeq, checkReqResultError[j], executedJobList, null, null);
ThreadJobs(dataCollection, matchedJobs[j], jobResults, sLotStepSeq, checkReqResultError[j], executedJobList);
}
for (int k = ; k < asy.Length; k++)//必须asy全部处理完成才能往下进行
{
asy[k].EndInvoke(asyncResult[k]);
}
我们看线程池
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace ThreadingLearning
{
class Program
{static void Main(string[] args)
{ //start new .....
//申明一个Action 的委托list
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(p => action(), null);
} Console.ReadLine(); }
}
}
结果:

A-1 过了就是A-4 则说明主线程(for循环)的执行速度,比子线程执行的速度快,或者说优先级高。(不一定,总体是这样的)
网上还看到了这样的结果:

解释出现这样现象的原因:
醒悟过来:由于被置于ThreadPool中的操作时异步的,还没有来的执行的时候,ation已经被for循环改变,永远是同一个ation对象!
出现的情况,那要根据个人的cpu情况了,
解决方法一:Thread.Sleep(N)
//遍历输出结果;
foreach (var action in actions)
{
Thread.Sleep();
//Thread.Sleep(N)是对当前线程阻塞一定时间,
//那这个处理不论是主线程还是线程池中的线程都是有效果的,
//至少为线程池中的线程的请求与启动赢得了时间
ThreadPool.QueueUserWorkItem(p => action(), null);
}
解决方法二:使用中间变量;
foreach (var action in actions)
{
var temp = action;
ThreadPool.QueueUserWorkItem(p => temp(), null);
}
下面这种情况会出现bug;会出现如图二的bug,
//遍历输出结果;
var action=actions[]; //先随便赋一个值,
foreach ( var v in actions)
{
action = v;
ThreadPool.QueueUserWorkItem(state => action(), null);
}
结果:bug

net异步线程注意事项的更多相关文章
- SpringBoot 异步线程简单三种样式
引用:在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x ...
- 卸载AppDomain动态调用DLL异步线程执行失败
应用场景 动态调用DLL中的类,执行类的方法实现业务插件功能 使用Assembly 来实现 但是会出现逻辑线程数异常的问题 使用AppDomain 实现动态调用,并卸载. 发现问题某个插件中开启异步线 ...
- net异步线程获取返回值的三种方式
方式一:endInvoke using System; using System.Collections.Generic; using System.Text; using System.Thread ...
- AsyncTask实现异步线程通信
AsyncTask是Android1.5开始提供的一个封装了Thread与Handler可以实现异步线程的简单方式,不需要再自己实现子线程,然后在主线程处接受数据. 因为AsyncTask是用线程池, ...
- 安卓 异步线程更新Ui
异步跟新UI: 1.handler+Thread(runnable):如果handler和Thread都写在了一个Java文件中,就不说了,如果runnable定义在了一个单独的类文件中,可以通过在构 ...
- 关于GCD同步组实现多个异步线程的同步执行中的注意点
在App开发中经常会遇到多个线程同时向服务器取数据, 如果每个线程取得数据后都去刷新UI会造成界面的闪烁 也有可能出现部分数据还没有获取完毕造成程序crash 之前在网上看到很多是利用dispatch ...
- 线程池内的异步线程创建UI控件,造成UI线程卡死无响应的问题分析
winform应用在使用一段时间后,切换到其他系统或者打开word.excel文档,再切换回winform应用时,系统有时出现不响应的现象.有时在锁屏后恢复桌面及应用时也发生此问题. 经微软支持确认, ...
- Eclipse RCP中超长任务单线程,异步线程处理
转自:http://www.blogjava.net/mydearvivian/articles/246028.html 在RCP程序中,常碰到某个线程执行时间比较很长的情况,若处理不好,用户体验度是 ...
- C# 在异步线程操作类的变量
如下代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } public string Me ...
随机推荐
- BZOJ1196: [HNOI2006]公路修建问题
Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织 ...
- hdu Random Sequence
这道题是道规律极强的题...真佩服在赛场上快速找到规律的人. d[i] a[i] res[i] 0 1.000000 C ...
- Linux系统管理员踢用户的方法
两种方法:1.使用pkill命令 1.1 通过who 或则 w 查看当前连接的用户 例如: w USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT jjony pts/0 ...
- sql 语句大小写的问题
关键字不区分大小写 例如 select ,from, 大小写均可 标识符区分大小写 例如 表名,列名 标识符如果不加双引号,默认是按大写执行 标识符如果加双引号,则是按原始大小写执行 但是,当表名加上 ...
- Win2003+Powershell2.0下无权限解锁账号
在GE环境下,我通过图形界面ADUC可以解锁一个员工账号,但是通过powershell命令却提示权限不足,咋回事? PS C:\Users\814072> Unlock-ADAccount ...
- java命令行参数
命令行参数就是main方法里面的参数String[] args他就是一个数组,args只是数据类型的一个名称,就是一个数组的变量,名称无所谓,类型没变就行了.这个就是程序的入口点.如图7.4所示: 图 ...
- CSS3 Transform——transform-origin
2012年9月,W3C组织发布了CSS3变形工作草案.CSS3变形允许CSS把元素转变为2D 或3D空间,这个草案包括了CSS3 2D变形和CSS3 3D变形. CSS3变形是一些效果的集合,比如平移 ...
- oracle sql日期比较
oracle sql日期比较:在今天之前: select * from up_date where update < to_date('2007-09-07 00:00:00','yyyy-mm ...
- 39. 求分数序列前N项和
求分数序列前N项和 #include <stdio.h> int main() { int i, n; double numerator, denominator, item, sum, ...
- 如何开发ecshop支付插件
如何开发ecshop支付插件 ecshop模板网 / 2014-06-03 目标一:搞懂ecshop的支付流程 选完商品,进入购物车页面,点击“结算中心”,页面跳转到flow.php?step=che ...