0

我处于一个场景中,我有许多 I/O 绑定任务,非常适合在后台运行。但是,我不能同时启动所有这些。

尽管我可以使用其他技巧(例如计数信号量),但我想知道是否可以将已经创建的 std::async(deferred) (嗯,未来,现在)策略更改为async每次期货完成时(嗯,种类的,但我希望你能得到一些背景信息)。

一旦我有了deferred未来,启动它的唯一方法就是阻塞直到它结束(等待或获取,甚至不是 wait_for)。我只想让它运行,但不等待它完成(现在;我会接受这个块,但稍后)。

4

1 回答 1

0

不是真的,但这在某些情况下可能会奏效:

    auto deferred_f = std::async(std::launch::deferred, some_function);

    auto def_to_async = [](auto &&f) { return f.get(); };

    auto async_f = std::async(std::launch::async, def_to_async, std::move(deferred_f));

deferred_f不过,现在已经不见了。如果有人有任何引用或指向它的指针,它将不起作用。

于 2020-09-09T09:09:05.957 回答