在Golang中,我相當新的意圖下游通過contexts
其他方法和功能。我明白context
是如何工作的,它是如何使用的,它是如何保持其價值的,它如何與父母context
及其行爲有關 - 我只是不明白爲什麼首先使用上下文。如何將context.WithDeadline或一個簡單的定時器之間做出選擇?
在一個更具體的例子中,這是這個問題的實際原因,在我工作的公司中,我們發現了一些由於邊緣情況而經常發生的非常長時間的查詢。
考慮到我們的限制,我們決定採取一個明顯的解決方案,直到我們投入時間解決根本原因,那就是殺掉超過5分鐘的查詢。
運行我們交易的方法接受最初在API調用中啓動的context
。這是context
一路向下傳遞到交易功能。在那一刻,我發現2個解決方案,以殺死查詢:
1)使用新的上下文:
啓動一個新的
context.WithTimeout(ctx, time.Duration(5 * time.Minute))
觀看
Done
通道在go routine
並殺死交易當出現信號時- 如果事務及時成功完成,則只需
cancel
環境並按預期提交事務。
2)使用Timer
:
- 創建
Timer
5分鐘持續時間 - 如果時間已經過去,殺死交易
- 否則,提交事務。
從邏輯上講,它們是相同的解決方案,但是,何時以及如何決定是否使用context
有規定期限或好老Timer
?
作爲1.8 ['數據庫/ sql'](https://golang.org/pkg/database/sql /#DB.BeginTx0Z)支持使用上下文。我想這可能會簡化你的決定。 – jmaloney