【发布时间】:2016-04-15 20:11:18
【问题描述】:
我使用std::async 来加快任务的执行速度,该任务以前是按顺序执行的。
我的实现如下:
- 启动预先配置的任务数量(例如最多 10 个并发任务)
- 这些任务的未来存储在一个向量中。
- 一旦一个任务完成,它就会启动另一个任务,因此在任何时间点,最多有 10 个任务(此值已配置)正在运行。
- 在启动 10 个任务后,我的实现通过调用 get() 来等待最旧的任务(即向量中的第一个任务)完成。
虽然这可以正常工作,但有可能 10 个任务中的任何一个都可以先完成。我的实现总是等待向量中的第一个任务。有没有办法知道 10 项任务中的哪一项先完成?
例如未来对象本身发出信号,表明它已准备就绪。
我想实现类似于本文中提到的“WhenAny()”函数的功能:https://msdn.microsoft.com/en-us/library/jj155756.aspx
【问题讨论】:
-
显示一些代码。有很多方法可以做到这一点。
-
感谢您的回答。我会在问题中添加更多细节。
-
例如,您可以在完成时手动进行回调。如果“下一个任务函数”需要仅在最初创建任务的函数范围内可用的信息,则可以将回调编写为 lambda。
-
回调是否有任何原因无法启动下一个任务本身?那会更简单。当然,可能还有一些我不知道的额外限制来阻止它。
标签: c++ c++11 asynchronous c++14