void worker(promise<int> p) { try { //何か処理をして結果をpromiseに設定する p.set_value(computeSomething()); } catch(...) { //例外が発生したら例外をpromiseに設定する p.set_exception(current_exception()); } }
void on_write(const std::error_code& ec) { CF_DBG("<< write: %s", CF_EC(ec)); if (ec) { session->on_error(ec); pr.set_exception(std::system_error(ec)); } else { pr.set_value(); } }
void read_write_handler( const promise<size_t>::ptr& p, const boost::system::error_code& ec, size_t bytes_transferred ) { if( !ec ) p->set_value(bytes_transferred); else p->set_exception( boost::copy_exception( boost::system::system_error(ec) ) ); }