多线程的异常处理
1. 异常在线程内部处理
多线程使用过程中,在线程内部使用try...catch...是可以捕获异常的。但是外部使用try...catch...通常无法捕获异常,也就是说程序不会throw异常(异常被吞掉了)。
除非使用Task.WaitAll() 方法,这样的话可以捕获异常。异常捕获使用 AggregateException 对象,foreach 获取异常信息。
一般建议在线程内部将异常处理,即内部try...catch...
2. 多线程中有一个线程产生异常,取消所有的线程
主要使用CancellationTokenSource类来实现。
C#使用CancellationTokenSource 取消 Task的方法_C#教程_脚本之家 (jb51.net)
3. 线程不安全问题
多线程同时修改共有变量的时候,有的操作可能会被覆盖。
使用Lock对线程加锁,Lock里面的代码要尽量少