多线程的异常处理

1. 异常在线程内部处理

多线程使用过程中,在线程内部使用try...catch...是可以捕获异常的。但是外部使用try...catch...通常无法捕获异常,也就是说程序不会throw异常(异常被吞掉了)。

除非使用Task.WaitAll() 方法,这样的话可以捕获异常。异常捕获使用 AggregateException 对象,foreach 获取异常信息。

一般建议在线程内部将异常处理,即内部try...catch...

 

2. 多线程中有一个线程产生异常,取消所有的线程

主要使用CancellationTokenSource类来实现。

C#使用CancellationTokenSource 取消 Task的方法_C#教程_脚本之家 (jb51.net)

 

3. 线程不安全问题

多线程同时修改共有变量的时候,有的操作可能会被覆盖。

使用Lock对线程加锁,Lock里面的代码要尽量少

 

posted @ 2022-11-06 18:02  鲁燕云端  阅读(512)  评论(0编辑  收藏  举报