我处于一个场景中,我有许多 I/O 绑定任务,非常适合在后台运行。但是,我不能同时启动所有这些。
尽管我可以使用其他技巧(例如计数信号量),但我想知道是否可以将已经创建的 std::async(deferred) (嗯,未来,现在)策略更改为async
每次期货完成时(嗯,种类的,但我希望你能得到一些背景信息)。
一旦我有了deferred
未来,启动它的唯一方法就是阻塞直到它结束(等待或获取,甚至不是 wait_for)。我只想让它运行,但不等待它完成(现在;我会接受这个块,但稍后)。
我处于一个场景中,我有许多 I/O 绑定任务,非常适合在后台运行。但是,我不能同时启动所有这些。
尽管我可以使用其他技巧(例如计数信号量),但我想知道是否可以将已经创建的 std::async(deferred) (嗯,未来,现在)策略更改为async
每次期货完成时(嗯,种类的,但我希望你能得到一些背景信息)。
一旦我有了deferred
未来,启动它的唯一方法就是阻塞直到它结束(等待或获取,甚至不是 wait_for)。我只想让它运行,但不等待它完成(现在;我会接受这个块,但稍后)。
不是真的,但这在某些情况下可能会奏效:
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
不过,现在已经不见了。如果有人有任何引用或指向它的指针,它将不起作用。