【发布时间】:2015-12-11 13:38:45
【问题描述】:
我正在构建一组在事件分派期间在 GUI 线程中工作的期货,并希望采用 std::future 的 API,但遇到了链接期货(非阻塞异步执行)的问题。
假设我们有一个返回未来的函数,我们想在未来准备好后执行一些事情
disconnect().then([](std::future<State> &&f) {
...
});
我的理解是,当对从“then”返回的未来不做任何事情时,它将被销毁,未来将被中止,函数将不再执行。因此,为了确保链仍然存在并正确执行,我们必须将未来保存在某个地方(可能作为数据成员)。
如果我们对返回的 future 不感兴趣,而只对操作链和函数是否正确执行感兴趣,我们应该怎么做?我们是否应该把返回的future放到new std::future<R>(...)中,完成后在lambda中删除,比如“delete &f;” ?不过,这看起来不对。
【问题讨论】:
-
如果未来是可选的,它可能应该是一个指针或一个 unique_ptr
-
@paulm “如果未来是可选的”是什么意思? "then" 不总是返回一个结果成为传递函数对象的返回值的未来吗?
-
"如果我们对返回的未来不感兴趣,我们应该怎么做" 如果你不总是想要未来,那么它应该是可选的
-
如果“then”不返回未来,那么计算的状态将如何存储?出于这个问题的目的,我们假设我们正在研究并发 TS 的 std::future。我如何在不存储期货的情况下触发这样的链?
-
"我的理解是,当对"then"返回的future不做任何事情时,它将被销毁,future将被中止,函数将不再执行。" 并发的地方TS 是这么说的吗?