dingdayu-go-async 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
dingdayu-go-async 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
dingdayu-go-async 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache-2.0
开发语言 Google Go 查看源码 »
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发网络工具包
开源组织
地区 国产
投 递 者 dingdayu
适用人群 未知
收录时间 2020-11-04

软件简介

Go 安全异步任务

基于 Go 的安全异步包。

安装

go get github.com/dingdayu/async/v2

示例

package main

import (
 "context"
 "fmt"
 "os"
 "os/signal"
 "sync"
 "syscall"
 "time"

 "github.com/dingdayu/async/v2"
)

type ExampleAsync struct {
}

// OnPreRun: 运行之前的调用, panic 会导致注册失败
func (a ExampleAsync) OnPreRun() {
 fmt.Printf("\u001B[1;30;42m[info]\u001B[0m ExampleAsync 注册成功,开始运行!\n")
}

// Name: 异步任务的名称,需要在进程内唯一,否则会被替换
func (a ExampleAsync) Name() string {
 return "example"
}

// Handle: 异步任务的核心逻辑,通过 for 进行巡航,通过 context 进行安全退出
func (a ExampleAsync) Handle(ctx context.Context, wg *sync.WaitGroup) {
 defer wg.Done()

 for {
  select {
  default:
   // todo:: Logical unit
   time.Sleep(3 * time.Second)
   fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
  case <-ctx.Done():
   return
  }
 }
}

// OnShutdown: 在退出前并行调用
func (a ExampleAsync) OnShutdown(s os.Signal) {
 fmt.Printf("\u001B[1;30;42m[info]\u001B[0m ExampleAsync 接收到系统信号[%s],准备退出!\n", s.String())
}

func main() {
 // 处理系统 SIGINT and SIGTERM 信号.
 ch := make(chan os.Signal)
 signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)

 ayc := async.NewAsync(context.Background(), ch)

 _ = ayc.Register(ExampleAsync{})

 ayc.Wait()
 fmt.Println("[1;30;42m[info]\u001B[0m Task exited")
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2016/10/09 14:47

async

一、含义 ES7中提供了async函数,是的异步操作变得更加方便。 async 函数就是Generator函数的语法通。 async函数的实现就是讲Generator函数和自动执行器包装在一个函数里。 二、用法 同Generator函数一样,async函数返回一个Promise对象,可以使用then() 添加回调函数,当函数执行的时候,一旦遇到await 就会先返回,等到出发的异步操作完成,再接着执行函数体内后面的语句。 var async = require('asyncawait/async'); var awa...

0
0
发表了博客
2019/09/09 15:44

async与await

async/await的基础用法 一、async/await的优点 1)方便级联调用:即调用依次发生的场景; 2)同步代码编写方式: Promise使用then函数进行链式调用,一直点点点,是一种从左向右的横向写法;async/await从上到下,顺序执行,就像写同步代码一样,更符合代码编写习惯; 3)多个参数传递: Promise的then函数只能传递一个参数,虽然可以通过包装成对象来传递多个参数,但是会导致传递冗余信息,频繁的解析又重新组合参数,比较麻烦...

0
0
发表了博客
2019/02/13 15:07

async与defer

<script>元素的几种常见属性: async 异步加载,立即下载,不应妨碍页面其他操作,标记为 async 的异步脚本并不保证按照指定的先后顺序执行,因此异步脚本不应该在加载期间修改DOM,异步脚本一定会在页面的 load 事件前执行,不一定在 DOMContentLoaded 事件前后触发,js有依赖性时,用async很容易出错,async 是无序执行,自身加载完就会执行; DOMContentLoaded 事件于window的onload事件不同: onload事件是UI事件,是windo...

0
0
发表于大前端专区
2019/04/30 21:59

async妙用

## 简介 * async函数是Generator 函数的语法糖,async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。 * async函数对Generator 函数的改进点有以下几点: * 内置执行器,不需要像Generator 函数要去调用next()才能让函数执行 * 更好的语义化 * 返回的是promise对象 ## 返回promise对象 * async函数返回一个 Promise 对象。 * async函数内部return语句返回的值,会成为then方法回调函数的参数...

0
0
发表于大前端专区
2019/07/30 20:42

async/await

#### async函数 申明函数时在function前面加上关键字async,如下 ```javascript async function test1(){ return 1; } test1().then((res)=>{ console.log(res);//打印1 }); async function test2(){ return new Promise((resolve)=>{ resolve(1) }); } test2().then((res)=>{ console.log(res);//打印1 }); ``` **总结**:async函数总是返回一个promise对象,如果函数有return,但是返回的不是promise对象,没关系,JavaScrip...

0
0
发表于大前端专区
2018/08/03 15:01

async 和 await

[async和await的使用](https://www.cnblogs.com/SamWeb/p/8417940.html) ### async async 异步执行 用法: async function name () { return 'hello' } console.log(name()) console.log('world') async 后面的函数的执行不会阻碍后面console的执行,两个语句是同时执行的。 ### await await 同步执行 用法: await function name () { return 'hello' } console.log(name()) console.log('world') await 后面的函数执行完了才能...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
4 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部