diff --git a/platformapi/limit_access_speed_test.go b/platformapi/limit_access_speed_test.go index 56abf2ab..284107d5 100644 --- a/platformapi/limit_access_speed_test.go +++ b/platformapi/limit_access_speed_test.go @@ -4,6 +4,8 @@ import ( "fmt" "testing" "time" + + "git.rosy.net.cn/baseapi/utils" ) func TestLimitSpeed(t *testing.T) { @@ -21,29 +23,29 @@ func TestLimitSpeed(t *testing.T) { TimeGapMilliSecond: 2000, }) - go func() { + utils.CallFuncAsync(func() { count := 0 for { limiter.AccessAPI("limited1persecond") fmt.Printf("limited1persecond, time:%s, count:%d\n", time.Now().Format("2006-01-02 15:04:05.00000"), count) count++ } - }() - go func() { + }) + utils.CallFuncAsync(func() { count := 0 for { limiter.AccessAPI("limited10per10second") fmt.Printf("limited10per10second, time:%s, count:%d\n", time.Now().Format("2006-01-02 15:04:05.00000"), count) count++ } - }() - go func() { + }) + utils.CallFuncAsync(func() { count := 0 for { limiter.AccessAPI("otherAPI") fmt.Printf("otherAPI, time:%s, count:%d\n", time.Now().Format("2006-01-02 15:04:05.00000"), count) count++ } - }() + }) time.Sleep(30 * time.Second) } diff --git a/utils/utils.go b/utils/utils.go index 835bb098..812e9f5d 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -155,10 +155,21 @@ func CallFuncAsync(funcToCall func()) { }() } +func AfterFuncWithRecover(duration time.Duration, funcToCall func()) *time.Timer { + return time.AfterFunc(duration, func() { + defer func() { + if r := recover(); r != nil { + baseapi.SugarLogger.Errorf("error when calling func:%v, r:%v", funcToCall, r) + } + }() + funcToCall() + }) +} + func CallFuncRetryAsync(handler func(int) error, duration time.Duration, retryCount int) (err error) { err = handler(retryCount) if err != nil && retryCount > 0 { - time.AfterFunc(duration, func() { + AfterFuncWithRecover(duration, func() { CallFuncRetryAsync(handler, duration, retryCount-1) }) }