C# 线程,异步,协程
来源:互联网 发布:天涯 知乎 豆瓣 贴吧 编辑:程序博客网 时间:2024/06/10 05:39
一 线程
二 异步
1 为什么要用异步
简单说异步就是并行执行两件事,比同步执行快
函数a执行3秒,函数b执行5秒,如果按顺序执行需要8秒(同步)
使用异步的话,可以用异步先调用函数b,然后正常调用函数a,这时b还没执行完,a已经开始执行了,所以总时间应该会<=8秒
2什么时候用异步,什么时候用线程
http://blog.csdn.net/onafioo/article/details/44342775
3 怎么用异步
首先委托其实不单是个函数指针,实际是个类,类中有几个方法可用来实现异步BeginInvok,EndInvok等
http://blog.csdn.net/onafioo/article/details/44354219
public delegate void TestDele(int num);public void showNum(int num){for(int i=0;i<10000000;i++){}Debug.Log(string.Format("num:{0}",num));}void main(){TestDele testDele = new TestDele(showNum);//这里定义委托时,内部自动生成BeginInvok,EndInvok等,这些方法用来实现异步testDele.BeginInvok(100);Debug.Log("start");testDele.EndInvok();//这里必须结束,因为异步实际是从线程池中取了一个空闲线程,用完得归还Debug.Log("over");}
1 执行testDele.BeginInvok
2 不用等待showNum结束马上执行Debug.Log("start")
3 等待showNum结束执行testDele.EndInvok();//没结束就阻塞
4 最后执行Debug.Log("over");
4 c#中的AsyncCallback(异步委托)是做什么用的
首先c#异步函数是启动(BeginInvok)了一个线程池中的线程,所以要在函数结束后归还给线程池(EndInvok)
所以问题来了怎么判断函数结束呢
有4种方法http://blog.csdn.net/onafioo/article/details/44354219
而AsyncCallback就是用来在异步函数结束后,使用回调的方法执行EndInvok
用回调的好处
1 不会形成阻塞
2 不用自己循环等待函数结束再EndInvok,等函数结束后自动通过AsyncCallback调用 处理后事的函数执行EndInvok
public delegate void TestDele(int num);public void showNum(int num){for(int i=0;i<10000000;i++){}Debug.Log(string.Format("num:{0}",num));}public void callBack(IAsyncResult ar)//用来处理后事(EndInvok)的函数,参数必须写IAsyncResult类型{TestDele dele = (TestDele) ar.AsyncState;dele.EndInvok();//这里也可以写点其他有用的东西..}void main(){TestDele testDele = new TestDele(showNum);//这里定义委托时,内部自动生成BeginInvok,EndInvok等,这些方法用来实现异步testDele.BeginInvok(100,new AsynvCallback(callBack),testDele);Debug.Log("start");}
三 协程
0 0
- C# 线程,异步,协程
- C# 线程与异步
- C#线程 异步调用
- C#异步和线程
- C#异步跨线程
- C# 异步与线程
- C#异步线程(一)异步委托
- C#线程与异步调用
- c#多线程:线程池和异步编程
- c#多线程:线程池和异步编程
- c#中的线程同步或者异步问题
- C#异步调用与线程总结
- c#多线程:线程池和异步编程
- C# 异步调用与线程总结
- C#异步调用和线程的同步
- C#异步调用与线程总结
- C#线程通信和异步委托
- C#线程通信和异步委托
- JDK环境变量
- Dom4j解析xml文件-操作节点和属性及写入其他xml文件
- TCP--SYN洪水攻击
- Android dispatchTouchEvent介绍
- 特殊的数字
- C# 线程,异步,协程
- 难度0 大小写互换
- 08-语言入门-08-5个数求最值
- 还是A+B OJ1015
- P27 ,4
- spring4+mybatis 配置注解装载bean
- P27,5
- Android基础笔记(十四)- 内容提供者读取联系人
- 通达OA 小飞鱼工作流在线培训教程(一)HTML基础介绍