Go异步check简单示例

 

 

异步check代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main
 
import (
    "fmt"
    "reflect"
    "time"
)
 
type janitor struct {
    interval time.Duration
    overtime time.Duration
}
 
 
func (j *janitor) Runasyncheck(f interface{}, params ...interface{}) {
    //fmt.Println(params)
    //创建周期断续器
    ticker := time.NewTicker(j.interval)
    //创建定时器
    timer := time.NewTimer(j.overtime)
    loop:
        for {
            select {
            case <-timer.C: //当Timer每次到达设置的时间时就会向管道发送消息,此时超时退出
                print("超时\n")
                break loop
            case <-ticker.C: //当Ticker每次到达设置的时间时就会向管道发送消息,此时进行异步check操作
                //print("异步check\n")
                fv := reflect.ValueOf(f)
                realParams := make([]reflect.Value, len(params)) //参数
                for i, item := range params {
                    realParams[i] = reflect.ValueOf(item)
                }
                fv.Call(realParams)
            }
        }
    fmt.Println("Break")
}

测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main<br>import (
    "fmt"
    "time"
    "testing"
)
func hello1() {
    fmt.Println("123")
}
 
func hello2(i string) {
    fmt.Println(i)
}
func Test_main(t *testing.T){
    j := &janitor{
        interval: time.Second,
        overtime:5*time.Second,
    }
    j.Runasyncheck(hello1)
    j.Runasyncheck(hello2,"23")
 
}

  

 

posted @   -零  阅读(269)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2020-05-07 【机器学习】ID3算法构建决策树
2020-05-07 连续属性离散化处理
点击右上角即可分享
微信分享提示