可以看到,我們操作流程中從沒有考慮什麼執行完沒有的這種問題。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 非同步操作還沒開始 ...