Task.WaitAll()和Task.WhenAll()区别
Task.WaitAll()和Task.WhenAll()区别:
1、WaitAll
- 同步方法,会阻塞当前线程
- 在 UI 线程使用可能导致死锁
- 抛出 AggregateException
- 适用于控制台或后台工作线程
2、WhenAll
- 异步方法,不会阻塞当前线程
- 返回 Task,可以使用 await
- 直接抛出第一个遇到的异常
- 适用于 async/await 模式
- 推荐在 UI 应用程序中使用
3、使用建议:
- 在异步方法中始终使用 WhenAll
- 在需要同步等待且确定不会造成死锁的场景下使用 WaitAll
- 在 UI 应用程序中避免使用 WaitAll
- 需要处理多个异常时,使用 WhenAll 并检查任务的 Exception 属性