1.简介

NewTimerNewTimerNewTimer

2.基本使用

NewTimer
NewTimer
NewTimer

下面是一个简单的实现代码展示:

NewTimertime.Timerdone selectTimerTimer

Task finished.

如果将任务完成时间改为超过 5 秒钟,程序将会在 5 秒钟后超时,输出如下信息:

Task timed out.

通过这个简单的例子,我们可以看到,如果任务在指定超时时间内完成,此时会执行正常的业务逻辑;如果任务未在指定的超时时间内完成,此时将走执行超时逻辑。

NewTimertime.Timer

3.实现原理

3.1 内容分析

selectchannelchannelchannel
channelchannel
channelselectcasechannelcase
Cchannel

3.2 基本思路

NewTimerTimer
Timerchan TimeselectTimerC
TimerCchannelTimerC
TimerC
gostartTimer
startTimer
startTimerchannel

3.3 实现步骤

startTimerruntimeTimer
runtimeTimerruntimeTimerstartTimerruntimeTime
runtimeTimer
when int64period int64f func(any, uintptr)arg anyfnextwhen int64nextwhenseq uintptrseq
runtimeTimerstartTimerchannel
c
runtimeTimerwhenwhen
fNow()cfruntimeTimerarg
startTimerchannel
TimerC

3.4 NewTimer的实现

NewTimerstartTimer
cTimertctCchannelTimerCTimerCchannelchannel
runtimeTimersendTimeNow()
TimerCchannelchannelchannelselectTimerchannel

4.总结

NewTimertimertimerCchannel
timerCchannelstartTimerruntimeTimerCchannel