begininvoke
(1)普通方法调用(直接调用)与Invoke()方法调用方法 使用的线程Id是一样的 即属于同步。
(2)begininvoke(<输入和输出变量>,AsyncCallback callback,object asyncState)方法调用方法 则是启用了新的线程Id 属于异步
可通过 Thread.CurrentThread.ManagedThreadId 获取当前线程的Id
*委托类型的BeginInvoke(<输入和输出变量>,AsyncCallback callback,object asyncState)方法
异步调用的核心, BeginInvoke(多线程能执行的原因)。
输入和输出变量:表式委托对应的实参。
第二个参数(AsyncCallback callback):回调函数,表示异步调用后自动调用的函数 ,共用一个线程id. AsyncCallback是一个委托 有一个参数(asyncState )
第三个参数(object asyncState):用于向回调函数提供参数信息。返回值:IasyncResult:异步操作状态接口,封装了异步执行中的参数。
EndInvoke监视BeginInvoke。委托类型的EndInvoke()方法:借助IasyncResult接口对象,不断查询异步调用是否结束。该方法知道异步调用的方法所有参数,所以,异步调用完毕后,取出异步调用的结果作为返回值。
对于同步和异步的总结:异步三大特点
(1)同步方法会出现“假死现象”即卡住界面,异步则不会 原因:异步启动了子线程执行任务,主线程得到释放
(2)同步速度慢,异步速度快 原因:异步启动了多个线程执行任务,占用更多的资源(异步时cpu瞬间上升)
(3)异步是无序的 原因:线程的启动和执行是由操作系统决定的,是无序的。可能每个子线程里面耗时不一样
相关阅读
范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系
什么是用户体验地图?什么是服务蓝图,他们有什么不同?文章为你解读。我们生活中的每一件发生的事情都是一种旅程,它也许几秒,几年,甚至一
Hz是频率单位,例如10Hz就是表示每秒运算10次Mbps是Million bit per secend (表示每秒传输的兆位数)=Mb/s MHz 和 Mbps 并不是同一个
静态变量: 是被static 修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中
java中getRealPath("/")和getContextPath()的区别
一.以下是在servlet中测试的。二.运行结果如下(其中myfile文件夹是不存在的)。三.总结。1.getRealPath("/")方法返回的是项目在服