虽然在某些情况下使用 async void 似乎是可以接受的,例如您提供的人为示例,但它是由于几个根本原因,通常被认为是不好的做法。
async void 方法的主要陷阱之一是它们不同的错误处理语义。从 async void 方法中逃逸的异常不会自动传播,并且可能难以捕获,从而导致意外行为。
Async void 方法缺乏组合成更高层的能力- 级异步方法。 async void 方法中封装的逻辑是孤立的,因此很难重用以及与其他异步代码集成。
Async void 方法给测试带来了巨大的挑战。由于异常不会自动传播,因此编写有效覆盖方法功能及其潜在错误路径的单元测试会更加复杂。
还值得注意的是async void 是一种与其他支持异步编程的语言所采用的常见做法不同的方法。 F#、Python、JavaScript 和 TypeScript 等语言不包含 async void 作为其语法的一部分。
在您提出的特定场景中,您不使用异步事件处理程序如果打算等待异步操作的结果,更合适的方法是使用 async void 事件处理程序。通过将事件处理程序修改为 async void(如响应中提供的代码片段所示),您可以减轻与 async void 相关的缺点,同时实现所需的功能。
以上是为什么 Async Void 被认为是异步编程中的不良实践?的详细内容。更多信息请关注PHP中文网其他相关文章!