类似oc block,回调都放在一个代码流里
##使用方式使用方式:
1.第一个参数是TaskFunc类型的方法,负责执行任务并返回gcd.Result结果
2.第二个参数是Replyfunc类型的方法,任务执行完后,回调这个方法,把结果封装成gcd.TResult
3.第三个参数是args…interface{},taskFunc的参数,同时存在gcd.TResult的args中

  1. gcd.AsyncTask(func(r gcd.TResult) {
  2. fmt.Println(r)
  3. }, func(args ...interface{}) gcd.Result {
  4. return gcd.Result{
  5. Error: nil,
  6. Data: args,
  7. }
  8. }, "test")

这份代码中的task.go 基于一份代码修改,一时找不到对应的链接,有知道的朋友请知悉

Async

把一个方法转成异步调用,并最终返回当前协程处理结果
##使用方法
1.Async 的第三个以后的参数,对应每二个fun的参数,必须一致

  1. gcd.Async(func(args ...interface{}) {
  2. c.Output(args)
  3. }, func(test int) (string, error) {
  4. start := time.Now().UnixNano()
  5. time.Sleep(time.Second * 10)
  6. end := time.Now().UnixNano()
  7. return fmt.Sprintf("arg:%d\nstart:%d\nend:%d\n", test, start, end), nil
  8. }, 90)

Async 与AsyncTask 的区别

1.Async 会回调到当前routine处理最终结果,所以当前routine会一直等待reply处理完成再退出
2.AsyncTask 回调方法会新起一个routine处理,所以当前routine执行完就马上退出;