訪問非同步操作結果 future

2021-08-21 16:58:36 字數 1262 閱讀 1377

一、std::future

通常乙個非同步操作我們是不能馬上就獲取操作結果的,只能在未來某個時候獲取。我們可以以同步等待的方式來獲取結果,可以通過查詢future的狀態(future_status)來獲取非同步操作的結果。future_status有三種狀態:

1.deferred:非同步操作還沒開始;

2.ready:非同步操作已經完成;

3.timeout:非同步操作超時。

獲取future結果有三種方式:get、wait、wait_for,其中get等待非同步操作結束並返回結果,wait只是等待非同步操作完成,沒有返回值,wait_for是超時等待返回結果。

二、std::promise

promise 物件可以儲存某一型別 t 的值,該值可被 future 物件讀取(可能在另外乙個執行緒中),因此 promise 也提供了一種執行緒同步的手段。在 promise 物件構造時可以和乙個共享狀態(通常是std::future)相關聯,並可以在相關聯的共享狀態(std::future)上儲存乙個型別為 t 的值。可以通過get_future來獲取與該 promise 物件相關聯的 future 物件,呼叫該函式之後,兩個物件共享相同的共享狀態(shared state)

1. promise 物件是非同步 provider,它可以在某一時刻設定共享狀態的值;

2. future 物件可以非同步返回共享狀態的值,或者在必要的情況下阻塞呼叫者並等待共享狀態標誌變為 ready,然後才能獲取共享狀態的值。

三、demo

#include // std::cout

#include // std::ref

#include // std::thread

#include // std::promise, std::future

//獲取future結果有三種方式:get、wait、wait_for,其中get等待非同步操作結束並返回結果,

//wait只是等待非同步操作完成,沒有返回值,wait_for是超時等待返回結果。

void print_int(std::future& fut)

int main ()

在go中封裝future物件處理非同步結果

在go中,有了協程和chan,就能輕鬆而優雅的實現很多模式。而引入future的思想可以解放思維。future是乙個物件,擁有setresult和getresult兩個方法。在呼叫getresult的時候,會阻塞並等待setresult,一定時間後超時返回nil。此時程式設計模型變為三段式 啟動並行...

Java非同步Future詳解

future主要用於有返回值的非同步任務。最核心的類是futuretask,它是future介面唯一的實現類。可以看出futuretask類實現了runnable和future介面。內部屬性有 private volatile int state private callablecallable t...

016 非同步處理 Future

用於在單獨的執行緒中執行程序,cpu空閒時。future注釋來標識非同步執行的方法。當使用同步處理時,所有方法呼叫都從執行apex 的同一執行緒進行,並且在該過程完成之前不會發生額外的處理。你可以使用 future的方法來執行任何你希望在自己的執行緒中非同步執行的操作。這提供了不阻止使用者執行其他操...