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 ...
随机推荐
- Ruby Hash与ActiveSupport’s HashWithIndifferentAccess对于key的区别
Ruby Hash的key定义的时候是支持symbol或者string的,所以访问的时候只能是symbol或者string其中一种方式. 建议使用symbol定义Hash的key,因为symbol在R ...
- android开发 BaseAdapter中getView()里的3个参数是什么意思
BaseAdapter适配器里有个getView()需要重写public View getView(int position,View converView,ViewGroup parent){ // ...
- JAVA图片处理--缩放,切割,类型转换
import java.io.*; import java.awt.*; import java.awt.image.*; import java.awt.Graphics; import java. ...
- mysql 商品表的设计思路(面向对象建表:类与对象)
学习地址 http://www.jtthink.com/course/play/352 商品通用信息主表:prop_main 不仔细多说,正常业务都会涉及到并且考虑的相对周全.常用字段[商品id][商 ...
- Layui - 示例
示例地址 http://www.layui.com/demo/ 下载地址 http://www.layui.com/ 示例代码 <!doctype html> <html> & ...
- The resource could not be loaded because the App Transport Security policy requires the use of a secure connection
xmpp 项目中遇到的问题,用苹果的通信API 写一个PUT 方法,向服务器上传一张图片.遇到如题问题. Plist 文件没有NSAppTransportSecurity属性 Dic,添加该属性,再添 ...
- 新浪SAE数据库连接demo和说明
<?php $con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); // ...
- Alamofire数据请求
let stringurl = "http://www.huiyunche.cn/kyleuat/banner/list" Alamofire.request(.GET,strin ...
- Smart ECM数据发布假数据测试工作。
1. ScriptBom.java//文件方法供接口调用 代码: public String setBomEcnHistoryDataByXML(String strView){//传入arg文件名 ...
- 各种常用的JSON接口,开动你的大脑你就可以做出各种应用,值得收藏
各种常用的JSON接口,开动你的大脑你就可以做出各种应用,值得收藏 浏览:1412 发布日期:2014/01/27 分类:技术分享 这里为大家搜集了一些能够返回JSON格式的服务接口.部分需要用J ...