2013-01-08 54 views
1

我有一個API必須將未來結果(future/shared_future)返回給客戶端。在有些情況下,我知道我可以多次返回「相同的未來」對象,因爲我有一個關聯的std :: promise,可以/應該將結果傳遞給多個客戶端(僞代碼)。std ::承諾通知多個客戶端

std::future<int> getVal() 
{ 
    //I have a list of promises kept 
    if (promiseExists) 
    { 
    //this throws an exception because get_future() can be called only one time, unfortunately 
    return existingPromise.get_future(); 
    } 
    .... 
} 

的問題是,你不能叫get_future()多次在同一實例,或同樣的承諾獲得總得shared_future對象。

getVal有一個解決方法來返回一個shared_future(從構建shared_future from existingPromise.get_future()獲得),但在這種情況下,我必須緩存shared_future對象與承諾對象,並且它會更簡單的只是有一個承諾對象,以某種方式能夠將未來多次返回給不同的客戶端。有沒有辦法做到這一點 ?

回答

3

爲什麼你需要遵守承諾?只有結果的提供者需要承諾,結果的所有消費者只需要共享的未來。

+0

我有一個使用回調的api,所以我必須自己遵守這個承諾,以便我可以在api完成時設置結果 – Gmt