gpt4 book ai didi

c# - 从异步中捕获未处理的异常

转载 作者:IT王子 更新时间:2023-10-29 04:38:19 27 4
gpt4 key购买 nike

当等待的 async 方法抛出异常时,异常会存储在某处并延迟抛出。在 WinForms 或 WPF 应用程序中,它使用 SynchronizationContext.Current 来发布异常的抛出。然而,例如一个控制台应用程序,它会在线程池上抛出异常并关闭应用程序。

如何防止 async 方法抛出的异常导致应用程序崩溃?

编辑:

显然,我描述的问题是因为我有 void async 方法。查看评论。

最佳答案

How can I prevent exceptions thrown from an async method from bringing down the application?

遵循这些最佳实践:

  1. 所有 async方法应返回 TaskTask<T>除非他们必须返回void (例如,事件处理程序)。
  2. 在某些时候,你应该 await所有Task s 从 async 返回方法。您不想这样做的唯一原因是您不再关心操作的结果(例如,在您取消它之后)。
  3. 如果您需要从 async void 捕获异常事件处理程序,然后在事件处理程序中捕获它 - 就像您在同步代码中所做的那样。

你可以找到我的 async / await intro post有帮助;我还介绍了其他几个最佳实践。

关于c# - 从异步中捕获未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12314410/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com