ID가있는 서버에 요청을 보내는 비동기 실행 프로그램이 있습니다. 서버는 요청을 수행하고 실행 프로그램은 응답에서이 동일한 id 값으로 작업 항목 promise
을 식별 할 수 있습니다. 요청 시간이 초과 될 수 있습니다. 이 경우, 집행자는이 요청의 ID를 완전히 삭제해야합니다. 그러나 나는 미래가 타임 아웃되고 서버의 ID가 없을 때이 약속을 어떻게 식별 할 수 있을지 모릅니다.timed-out에서 식별자 가져 오기 std :: future?
간결하게 간단한 예를 게시하고 있습니다.
struct Executor {
std::map<work_id_t, std::promise<Result>> work_items;
};
// run requests asynchronously
std::future<Result> Executor::post_work(Request r, work_id_t id) {
work_items[id] = std::promise<Result>();
do_request(w);
return work_items[id].get_future();
}
// called when a requests finishes (the server supplies the id)
void Executor::work_finished(work_id_t id, Result r) {
work_items[id].set_value(r);
work_items.erase(id);
}
// ...
Executor e;
auto ft = e.post_work(Request("foo"));
auto wait_result = ft.wait_for(timeout_value);
if (wait_result == std::future_status::timeout) {
e.remove_item(???); // what can I pass here?
}
타임 아웃이 발생하면 어떻게 remove_item
기능을 구현할 수 있습니까? 또는 유사한 메커니즘을 허용하도록 디자인을 어떻게 변경 할 수 있습니까?