我想包装一个旧的回调方式异步api以使用std :: promise / future。
struct InternalState {
std::promise<int> promise_;
// other internal state
void Callback(int result) {
promise_.set_value(result);
delete this;
}
};
std::future<int> DoSomethingAsync() {
auto state = new InternalState();
auto future = state->promise_.get_future();
// this will run task in other thread, and put result via callback function
AsyncOp(state);
return future;
}
在其他线程中运行AsyncOp
的运行任务并立即返回,计算结果后,将通过回调函数通知它。
很有可能在以后的get()/wait()
之前,AsyncOp
已经完成,并且所有InternalState对象包括的promise都被删除了。配对std::future::get()
被删除后,std::promise
是否安全?