![](https://csdnimg.cn/release/download_crawler_static/86374418/bg1.jpg)
委托:将方法作为参数传递,避免大量的 if-else 判断。
事件:对委托进行了封装,防止调用委托方随意对委托进行修改。
Observer 设计模式:(为了定义对象间一对多的依赖关系,以便于当监视对象状态改变时,
监视者被自动告知并更新)
Subject:监视对象,包含着其他对象感兴趣的内容;
Observer:监视者,监视 Subject
事件发生顺序:注册-》状态改变-》自动调用
反射:可访问一个正在运行的程序的元数据。
异步编程:
代码不需要按照编写时的顺序执行,异步调用某方法时,该方法会立即返回,
然后再执行方法内部的语句。
11-30
如果程序定义了一个不会完成的前台线程,主程序并不会正常结束。(读注:之前调用组卷,
异常后系统无法退出,不知道是否是这个原因)
lock:如果锁定了一个对象,则需要访问该对象的所有其它线程会处于阻塞状态。是 Monitor
类的语法糖。
12-3
线程内的代码使用 try catch 捕获异常。
12-6
线程池的用途是执行运行时间短的操作。原因是使用了一定数量的可用工作线程,如果执行
长时间计算密集型的操作,则会造成线程不够用的情况,降低性能。
线程池的线程都是后台线程,所以当前台线程(包括主程序线程)完成后,所有后台线程会停
止操作。
12-7
使用线程池,为操作系统节省了内存和线程数,但是付出了更长的执行时间。
12-16
异步编程模型(APM Asynchronous Programming Model)
基于事件的异步模式 (EAP Event-based Asynchronous Pattern)
基于任务的异步编程,任务并行库(TPL),(TAP Task-based Asynchronous Pattern)
当在调用 task.Result 时,调用线程会被阻塞,直到返回结果,只要不调用.Result,则不会阻
塞
调用.Result 会将异常传给当前线程(调用线程)
.Result //会封装异常为 AggregateException
.GetAwaiter().GetResult() //不会封装异常,因为 TPL 基础设施会提取异常
//多个任务抛异常的情况,会封装异常为 AggregateException