婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Golang實現超時退出的三種方式

Golang實現超時退出的三種方式

熱門標簽:賺地圖標注的錢犯法嗎 廣東語音外呼系統供應商 福州鐵通自動外呼系統 智能電銷機器人營銷 烏魯木齊人工電銷機器人系統 濮陽自動外呼系統代理 地圖標注測試 長沙ai機器人電銷 澳門防封電銷卡

前段時間發現線上有個服務接口,總是間歇性告警,有時候一天兩三次,有時候一天都沒有。

告警的邏輯是在一個接口中異步調用了另一個HTTP接口,這個HTTP接口調用出現超時。但是我去問了負責這個HTTP接口的同學,人家說他們的接口相應都是毫秒級別,還截圖監控了,有圖有真相,我還能說啥。

但是,超時是確實存在的,只是請求還可能沒有到人家服務那邊。

這種偶發性問題不好復現,偶爾來個告警也挺煩的,第一反應還是先解決問題,思路也簡單,失敗后重試。

解決方法

且不談重試策略,先說說什么時候觸發重試。

我們可以在接口請求出錯拋出err的時候重試,但是這種不好控制,如果一個請求出去,十來秒都沒有響應,則這個協程就要傻傻的等他報錯才能重試,浪費生命啊~

所以結合上面同學給出的毫秒級響應指標,可以設定一個超時時間,如果在指定超時時間后沒有返回結果,則重試(這篇重試不是重點)。

func AsyncCall() {
 ctx, cancel := context.WithTimeout(context.Background(), time.Duration(time.Millisecond*800))
 defer cancel()
 go func(ctx context.Context) {
 // 發送HTTP請求
 }()

 select {
 case -ctx.Done():
 fmt.Println("call successfully!!!")
 return
 case -time.After(time.Duration(time.Millisecond * 900)):
 fmt.Println("timeout!!!")
 return
 }
}

說明

1、通過context的WithTimeout設置一個有效時間為800毫秒的context。

2、該context會在耗盡800毫秒后或者方法執行完成后結束,結束的時候會向通道ctx.Done發送信號。

3、有人可能要問,你這里已經設置了context的有效時間,為什么還要加上這個time.After呢?

這是因為該方法內的context是自己申明的,可以手動設置對應的超時時間,但是在大多數場景,這里的ctx是從上游一直傳遞過來的,對于上游傳遞過來的context還剩多少時間,我們是不知道的,所以這時候通過time.After設置一個自己預期的超時時間就很有必要了。

4、注意,這里要記得調用cancel(),不然即使提前執行完了,還要傻傻等到800毫秒后context才會被釋放。

總結

上面的超時控制是搭配使用了ctx.Done和time.After。

Done通道負責監聽context啥時候完事,如果在time.After設置的超時時間到了,你還沒完事,那我就不等了,執行超時后的邏輯代碼。

舉一反三

那么,除了上面這種超時控制策略,還有其他的套路嗎?

有,但是大同小異。

第一種:使用time.NewTimer

func AsyncCall() {
 ctx, cancel := context.WithTimeout(context.Background(), time.Duration(time.Millisecond * 800))
 defer cancel()
 timer := time.NewTimer(time.Duration(time.Millisecond * 900))

 go func(ctx context.Context) {
 // 發送HTTP請求
 }()

 select {
 case -ctx.Done():
 timer.Stop()
 timer.Reset(time.Second)
 fmt.Println("call successfully!!!")
 return
 case -timer.C:
 fmt.Println("timeout!!!")
 return
 }
}

這里的主要區別是將time.After換成了time.NewTimer,也是同樣的思路如果接口調用提前完成,則監聽到Done信號,然后關閉定時器。

否則的話,會在指定的timer即900毫秒后執行超時后的業務邏輯。

第二種:使用通道

func AsyncCall() {
 ctx := context.Background()
 done := make(chan struct{}, 1)

 go func(ctx context.Context) {
 // 發送HTTP請求
 done - struct{}{}
 }()

 select {
 case -done:
 fmt.Println("call successfully!!!")
 return
 case -time.After(time.Duration(800 * time.Millisecond)):
 fmt.Println("timeout!!!")
 return
 }
}

1、這里主要利用通道可以在協程之間通信的特點,當調用成功后,向done通道發送信號。

2、監聽Done信號,如果在time.After超時時間之前接收到,則正常返回,否則走向time.After的超時邏輯,執行超時邏輯代碼。

3、這里使用的是通道和time.After組合,也可以使用通道和time.NewTimer組合。

總結

本篇主要介紹如何實現超時控制,主要有三種

1、context.WithTimeout/context.WithDeadline + time.After

2、context.WithTimeout/context.WithDeadline + time.NewTimer

3、channel + time.After/time.NewTimer

到此這篇關于Golang三種方式實現超時退出的文章就介紹到這了,更多相關Golang超時退出內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Go語言 go程釋放操作(退出/銷毀)
  • golang 阻止主goroutine退出的操作
  • Golang信號處理及如何實現進程的優雅退出詳解
  • Golang實現for循環運行超時后自動退出的方法
  • 解決go在函數退出后子協程的退出問題

標簽:調研邀請 慶陽 太原 貴陽 阿克蘇 德州 西雙版納 廣西

巨人網絡通訊聲明:本文標題《Golang實現超時退出的三種方式》,本文關鍵詞  Golang,實現,超時,退出,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang實現超時退出的三種方式》相關的同類信息!
  • 本頁收集關于Golang實現超時退出的三種方式的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    在线一区二区视频| 久久精品免费观看| 欧洲国产伦久久久久久久| 亚洲一区二区三区视频在线播放| 精品一区二区在线视频| 久久久久久久久99精品| 国产传媒日韩欧美成人| 国产精品久久久久精k8 | 日韩精品一区二区三区中文精品| 激情欧美一区二区| 国产欧美一区二区三区在线看蜜臀 | 日韩精品一区二区在线| 国产在线乱码一区二区三区| 中文久久乱码一区二区| 91麻豆精东视频| 五月婷婷另类国产| 26uuu精品一区二区在线观看| 国产激情视频一区二区在线观看| 亚洲免费伊人电影| 日韩西西人体444www| 粉嫩高潮美女一区二区三区 | 亚洲mv在线观看| 欧美tickling网站挠脚心| 成人在线一区二区三区| 亚洲国产一区二区视频| 欧美大片国产精品| 亚洲一区在线视频观看| 日韩欧美在线观看一区二区三区| 成人动漫一区二区三区| 亚洲成人动漫在线观看| 2021中文字幕一区亚洲| 色噜噜狠狠成人网p站| 人人爽香蕉精品| 国产精品久久久久久久久动漫| 欧美熟乱第一页| 国产成人在线视频网址| 亚洲成人高清在线| 国产亚洲精品超碰| 欧美精选一区二区| 成人av第一页| 琪琪一区二区三区| 亚洲欧洲日产国码二区| 日韩欧美你懂的| 色噜噜偷拍精品综合在线| 国产欧美一区视频| 欧美日韩一区二区在线观看| 豆国产96在线|亚洲| 亚洲777理论| 欧美高清在线视频| 日韩一区二区三区在线观看| 一本久久a久久免费精品不卡| 精品一区二区三区香蕉蜜桃| 亚洲国产精品一区二区www| 中文成人综合网| 欧美变态凌虐bdsm| 欧美在线视频你懂得| 国产成人鲁色资源国产91色综 | 成人福利电影精品一区二区在线观看| 午夜精品成人在线| 中文字幕一区二区5566日韩| 日韩亚洲欧美中文三级| 在线看国产日韩| 成人三级在线视频| 另类小说综合欧美亚洲| 亚洲一区视频在线| 国产精品毛片高清在线完整版| 日韩精品一区国产麻豆| 欧美日韩一级二级| 亚洲成人午夜电影| 自拍偷拍亚洲激情| 久久久久久久综合| 日韩欧美国产电影| 欧美精品日韩综合在线| 91浏览器打开| 成人av中文字幕| 国产在线不卡一卡二卡三卡四卡| 日韩在线观看一区二区| 亚洲国产三级在线| 亚洲日本va在线观看| 国产欧美1区2区3区| 精品国产免费视频| 欧美一级在线免费| 337p亚洲精品色噜噜| 欧美三级蜜桃2在线观看| 色哟哟一区二区| 91网站在线播放| voyeur盗摄精品| 国产v日产∨综合v精品视频| 韩国三级电影一区二区| 国产午夜三级一区二区三| 日韩一区二区精品| 欧美一区二区免费| 欧美一区二区三区视频在线| 欧美日韩精品免费| 欧美日韩在线免费视频| 欧美中文字幕一区二区三区| 色婷婷综合久久久| 91麻豆免费视频| 一本久久综合亚洲鲁鲁五月天| 99国产精品国产精品毛片| av日韩在线网站| 99久久国产综合色|国产精品| 成人性生交大片免费看中文| 成人少妇影院yyyy| 94-欧美-setu| 91丨九色丨国产丨porny| 97se亚洲国产综合自在线观| 一本色道久久综合亚洲91 | 国产91丝袜在线播放| 国产成人精品综合在线观看 | kk眼镜猥琐国模调教系列一区二区| 成人午夜av电影| 成人av网址在线| 99久久精品久久久久久清纯| 一本到高清视频免费精品| 一本大道久久a久久综合| 欧美体内she精高潮| 欧美日韩免费观看一区三区| 欧美另类久久久品| 欧美一区二区三区播放老司机| 日韩午夜在线影院| 久久久久久久综合色一本| 国产精品色哟哟| 欧美日韩免费高清一区色橹橹| 欧美日韩在线播放一区| 日韩午夜av电影| 久久久国产精品不卡| 国产精品入口麻豆九色| 亚洲精品中文字幕在线观看| 亚洲成av人**亚洲成av**| 免费成人美女在线观看| 国产乱一区二区| a亚洲天堂av| 欧美性一级生活| 日韩欧美专区在线| 国产精品人成在线观看免费| 一区二区三区产品免费精品久久75| 亚洲午夜久久久久久久久电影院| 日产国产高清一区二区三区 | 91在线无精精品入口| 在线观看亚洲专区| 国产乱一区二区| 色综合色综合色综合色综合色综合| 欧美手机在线视频| 久久综合色8888| 1000部国产精品成人观看| 亚洲成人一二三| 国产乱子伦一区二区三区国色天香| 91网站在线观看视频| 欧美一区二区精品| 国产精品久久久久桃色tv| 亚洲一区二区在线视频| 经典三级在线一区| 91在线免费视频观看| 91精品国产入口| 国产精品美女www爽爽爽| 视频一区二区三区在线| 高清久久久久久| 欧美精品aⅴ在线视频| 国产欧美一二三区| 亚洲va国产天堂va久久en| 国产风韵犹存在线视精品| 精品污污网站免费看| 国产亚洲精品精华液| 日韩欧美你懂的| 亚洲裸体xxx| 激情六月婷婷综合| 在线观看精品一区| 国产日韩精品一区| 午夜精品国产更新| 99久久精品久久久久久清纯| 精品免费一区二区三区| 亚洲综合在线视频| 国产精品亚洲视频| 欧美裸体bbwbbwbbw| 国产精品毛片无遮挡高清| 免费成人在线网站| 在线观看欧美日本| 国产精品久久久久久妇女6080| 美腿丝袜亚洲色图| 91极品美女在线| 国产午夜精品一区二区三区视频| 午夜精彩视频在线观看不卡| 北条麻妃国产九九精品视频| 日韩欧美在线网站| 亚洲18色成人| 91在线观看下载| 成av人片一区二区| 欧美xxxxx牲另类人与| 亚洲大片在线观看| 91免费看片在线观看| 国产三级三级三级精品8ⅰ区| 天堂精品中文字幕在线| 91片黄在线观看| 国产欧美精品一区二区色综合| 麻豆精品视频在线| 欧美日韩另类国产亚洲欧美一级| 中文字幕亚洲精品在线观看| 国产一区二区三区久久久| 日韩一级精品视频在线观看|