简介
通过golang的goruntine来提供一种异步处理程序的能力。
应用场景
这在多个耗时长的网络请求(如:调用API接口)时非常有用。其可将顺序执行变为并行计算,可极大提高程序的执行效率。也能更好的发挥出多核CPU的优势。
实现
异步执行类,提供异步执行的功能,可快速方便的开启异步执行
通过NewAsync() 来创建一个新的异步操作对象
通过调用 Add 函数来向异步任务列表中添加新的任务
通过调用 Run 函数来获取一个接收返回的channel,当返回结果时将会返回一个map[string][]interface{} 的结果集,包括每个异步函数所返回的所有的结果
使用
go get github.com/freshcn/async
demo
// 建议程序开启多核支持
runtime .GOMAXPROCS(runtime.NumCPU())
// 耗时操作1
func request1()interface{}{
//sql request…
}
// 耗时操作2
func request2()interface{}{
//sql request…
}
// 新建一个async对象
async:=new async.New()
// 添加request1异步请求,第一个参数为该异步请求的唯一logo,第二个参数为异步完成后的 回调函数 ,回调参数类型为func()interface{}
async.Add(“request1”,request1)
// 添加request2异步请求
async.Add(“request2”,request2)
// 执行
if chans,ok := async.Run();ok{
// 将数据从通道中取回,取回的值是一个map[string]interface{}类型,key为async.Add()时添加的logo,interface{}为该logo回调函数返回的结果
res := <-chans
// 这里最好判断下是否所有的异步请求都已经执行成功
if len(res) == 2 {
for k, v := range res {
//do something
}
} else {
log.Println(“async not execution all task”)
}
}
// 清除掉本次操作的所以数据,方便后续继续使用async对象
async.Clean()
更多内容请关注每日编程,每天进步一点。