2016年6月20日 星期一
Use context to cancel a function
我曾經使用到一個函數,是要帶入 context.Background。然後這個函數就等在裡面了,直到有回應才回傳結果出來。最近要將這個函數強制的跳出,一時間還不知道該怎麼做。苦惱之際看到了這個函數帶入了 context.Background(),於是就從context這個庫去爬文。於是先找到了
http://studygolang.com/articles/5131
裡面重點的說明了原文裡面 context 的原理與使用方法。原文在這兒:
https://godoc.org/golang.org/x/net/context
還有Google使用context的博客
http://blog.golang.org/context
前情提要講完了,現在直些貼程式碼該怎麼強制跳出一個帶入了context.Background的函數呢?
原本是:
err = aBlockedFunction(context.Background())
想要能夠跳出,就利用WithCancel來生一個cancel函數出來:
ctx,cancel := context.WithCancel( context.Background() )然後放進去
err = aBlockedFunction(ctx)
這樣就能在想要的時機點,呼叫cancel就能夠將旗下的子孫都清除掉,然後從函式返回了。
這也提醒了我,應該來用context來管理資源,這樣子就能夠很容易寫出讓別人cancel的函數了
訂閱:
意見 (Atom)