是否可以重新启动提升::未来

Is it possible to restart a boost::future?

本文关键字:未来 重新启动 是否      更新时间:2023-10-16

我正在使用boost::future .then()功能。我写了一个以异步方式读取文件的小型反应堆。有一个函数readFileAsync(int fd),它从文件中返回数据的未来。当描述符准备就绪并实现承诺时,该反应器将读取固定数量的字节。但是,如果文件中可以有更多数据,我无法决定如何重新启动未来。这样做有什么用法?

readFileAsync(fd).then([&](auto future) {
  auto data = future.get();
  if (data.block.empty()) { // end of file
     close(data.fd);  
  } else {
   readFileAsync(data.fd).then(...); // XXX: how to work that out?
  }
});

而不是匿名 lambda,创建正常的循环函数:

struct continue_reading
{
    template <typename T>
    void operator()(T future)
    {
        auto data = future.get();
        if (data.block.empty()) { // end of file
           close(data.fd);  
        } else {
           readFileAsync(data.fd).then(continue_reading);
    }
};
//...
readFileAsync(fd).then(continue_reading)