go 非同步結果

2021-09-28 21:04:07 字數 942 閱讀 8111

package main

import

("context"

"fmt"

"time"

)func

add(a, b int

)<-

chan

int(a, b)

return c

}func

main()

}}(ctx, cancel)

// 直接結算獲取結果

result :=

add(1,

2)// 對結果進行操作

fmt.

println

(<-result)

}

可以看到,我們操作流程中從沒有考慮什麼執行完沒有的這種問題。

直接拿來進行操作,其他什麼阻塞步驟,都被忽略。

因而存在下面這種情況

package main

import

("context"

"fmt"

"time"

)type result struct

func

(result *result)

run(

)func

add(_a, _b int

) result

// 協程自己去玩

go result.

run(

)// 直接返回結果

return result

}func

main()

}}(ctx, cancel)

sum :=

add(1,

5)fmt.

println

(<-sum.result)

}

也就是說,我們的操作每次都可以」直接「獲取結果,不用考慮過程。

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

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

Curator 非同步獲取結果

原聲的zookeeper 的crud api有同步和非同步之分,對於非同步api,需要傳遞asynccallback 對於getdata,getchildren,exists這三個api,還可以設定watcher。這些功能在curator中是如何實現的?在curator中,可以通過如下三種方式來非同...

訪問非同步操作結果 future

一 std future 通常乙個非同步操作我們是不能馬上就獲取操作結果的,只能在未來某個時候獲取。我們可以以同步等待的方式來獲取結果,可以通過查詢future的狀態 future status 來獲取非同步操作的結果。future status有三種狀態 1.deferred 非同步操作還沒開始 ...