任何的异步多线程,都是和委托相关,没有委托,啥也没有。
BeginInvoke在 C#里面,就是启动一个线程完成任务。
用设置断点的方法来调试的异步多线程,是行不通的,只有多写一些日志或者输出文本信息到控制台程序上。
如果要想看到控制台程序一样的界面输出结果,则在项目上点右键--属性,
同步方法和异步多线程区别:
1.同步方法卡界面,因为UI线程忙于计算;异步多线程不卡界面,主线程闲置,计算任务交给子线程在做。
2.同步方法慢,只有一个线程计算;异步多线程方法快,多个线程并发计算。多线程的资源消耗更多,但线程并不是越多越好(资源有限/管理线程也消耗资源)。具体开多个线程也不是定死的,要通过实际情况。
3.异步多线程是无序的,启动无序,执行时间不确定,结束无序,所以我们不要试图通过启动顺序或者时间等待来控制流程。
看一下这个图:
原因如下:
当多线程运行时,多个请求跑进来问线程池要线程,线程池里面的线程又是通过CLR向操纵系统申请的,哪个请求先拿到线程,要看操作系统分配,线程池掌控不了,所以是无序的。