无法理解异步函数的值,特别是来自库的值

Failing to understand the value of asynchronous functions specially from a library

本文关键字:特别是 异步 函数      更新时间:2023-10-16

我正在从库中实现一个异步函数,但现在我怀疑"异步"性质是否有用。这是函数的原型。

bool DoSomething(HANDLE wait)

客户端如何知道工作已经完成?库函数发出传递给它的wait句柄的信号。现在所有这些都工作得很好,但我想知道客户端应用程序仍然要等待函数来处理/显示结果。这反过来意味着它们应该在次要线程中调用它(您不希望等待主GUI线程)。当异步调用在次要线程中调用时,这难道不是首先静音异步调用的整个目的吗?

我能想到的最接近的事情是windows的ReadFile()可以异步运行,但然后我们(经常)需要等待它GetOverlappedResult()。情况是类似的。async函数本身是在一个内部线程(至少我的)中实现的,所以它只增加了一个额外的线程。我没有看到从库提供同步线程的动机?我错过什么了吗?在几乎所有情况下,客户端都希望等待它,那么为什么不在同一个线程中运行呢?

如果你怀疑异步函数是否有用,就不应该使用异步函数。

异步编程有几种模型。这些包括:1. 排队2. 线程3.中断异步编程允许应用程序在等待一件事的同时做另一件事。例如,您的应用程序可以在与用户进行交互的同时不断更新屏幕。

客户端知道工作完成的方式是通过同步方法。可用的同步方法取决于所使用的异步模型。

相关文章: