子代理

代理中的异步操作本身可以通过子代理来实现(在 Boost.Asio 中,这些异步操作被称为组成操作)。对于父代理而言,它只是在等待一个异步操作的完成。组成子代理的异步操作按顺序运行,当最后的完成处理程序执行时,父代理将恢复。

与单个异步操作一样,基于子代理的异步操作必须在调用完成处理程序之前释放其临时资源。我们也可以将这些子代理视为资源,在完成处理程序被调用之前其生命周期已经结束。

当一个异步操作创建了一个子代理时,它可以将父代理的相关特性传递(典型的做法是,将关联特征特殊化并转发给外部完成处理程序)给子代理。这些相关特性可以通过进一步的异步操作和子代理层次递归传播。这种异步操作的层叠反映了同步操作的另一个特性。

同步操作的特性
异步操作的等效属性

同步操作的组合可以重构为在同一线程上运行的子函数(即直接调用),而不改变功能。

异步代理可以重构为使用共享父代理相关特性的异步操作和子代理,而不改变功能。

最后,一些异步操作可以通过多个并发运行的子代理来实现。在这种情况下,异步操作可以选择性地传递父代理的相关特性。

Last updated