在论文N3784中,std::future::then
的接口包括一个重载版本,它接受一个执行器(在N3562中有更详细的描述)作为参数。因此,如果您想对回调函数在哪个线程上执行进行更多控制,可以这样做。
但是,在这里http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0159r0.html#futures.unique_future列出了所有并发 TS 中包含的功能的官方文档中,并没有包括 .then() 的那个重载版本,也没有提到执行器。它说:
当对象的共享状态准备好时,将在未指定的执行线程上调用延续函数INVOKE(DECAY_COPY(std::forward<F>(func))
,std::move(*this))
,其中对DECAY_COPY()
的调用在调用它的线程中被评估。为什么接口不提供精确控制闭包如何执行?那么怎样才能控制哪个线程运行回调函数?为什么要更改建议版本?
注意:我不确定我链接到的并发 TS 论文是否是最新的,但 cppreference 也没有在任何地方提到执行器。
编辑:如果有人有一个关于不继续使用执行器的 C++ 标准文件的参考或原因,那就太好了!