-
我把一个 async 方法的返回类型写成了 async void,它里面抛的异常 try-catch 死活拦不住、还直接把整个进程干崩了:一次 C# async void 吞掉异常、让异常逃逸到顶层崩溃进程的深度复盘
我们有个后台服务,我图省事把一个普通异步方法的返回类型写成了 async void,还在调用处包了 try-catch 自以为万无一失。可一旦方法内部抛异常,诡异的事发生了:try-catch 根本没拦住、异常像幽灵穿透了它,而且未捕获的异常直接让整个进程崩溃退出。查到底才明白:async void 是专为事件处理器(签名要求 void)设计的、不该用在普通异步方法上;它无法被 await,调用处…- 0
- 0
-
一个被随手写成 async void 的方法抛了异常,我外层的 try-catch 一个都没抓到、进程直接崩溃退出:一次 C# 异步返回类型用错的深度复盘
后台服务时不时毫无征兆整个进程挂掉,日志只留一条 UnhandledException——而那段抛异常的代码明明被 try-catch 严严实实包着。根因是被调方法返回类型是 async void 而非 async Task:async void 没有可 await 的 Task,异常无处传回,被直接抛到 SynchronizationContext 顶层成为未处理异常、崩溃进程,外层 try-c…- 4
- 0
-
我在 C# 里随手把异步方法写成了 async void,结果里面抛的异常我的 try-catch 怎么都抓不到、还直接把整个进程干崩了,我排查了大半天的复盘
我顺手把一个业务异步方法写成了 async void,平时没事,直到某天它内部异步调用抛了异常——我在调用处用 try-catch 严严实实包着,异常却完全没被 catch 到,还直接把整个进程干崩了。深挖才懂全是 async void 的锅:它无法被 await,调用方调用后立刻往下走,等 100ms 后异步操作真正抛异常时,外层代码早执行完、离开那个 try-catch 了;更致命的是 asy…- 0
- 0
Task
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!



