【发布时间】:2020-11-19 16:07:37
【问题描述】:
std::async 有两个重载,其中一个使参数 std::launch policy 显式,而另一个省略此参数。该策略是位掩码,因此可以同时指定launch::async|launch::deferred(或者您可以使用省略此参数的函数来避免策略)。在这种情况下,策略会在后台自动选择,并且不能保证选择。我想知道使用这种“未知”策略的原因是什么。
首先,您不应该将此策略与wait 函数一起使用:您可能只是收到future_status::deferred 响应后发现调用此函数没有用。接下来,如果您计划仅在某个点上设置 get 的值,则可以使用默认策略,但我认为没有理由将此选择保留在系统/库实现上,因为即使 std::launch::async 也可以优化用于执行。无论如何,实际显式选择的策略强烈影响使用模式,使用设计隐藏此信息的功能非常奇怪。
当有人希望将策略选择留给系统时,什么可能是实际用例?
【问题讨论】: