dingdayu-go-async 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
dingdayu-go-async 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
dingdayu-go-async 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
dingdayu-go-async 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
dingdayu-go-async 获得 2020 年度 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

目前最好的异步解决方案

0
0
发表了博客
2018/07/01 20:06

async和await

await和async是.NET Framework4.5框架、C#5.0语法里面出现的,await和async是语法糖。 注意: 1、async出现在方法的声明里面,任何一个方法都可以增加async。 2、await放在Task前面,async和await是成对出现的,只有async是没有意义的,只有await是报错的。 只有async是没有意义的。 只有await是报错的。 3、await 只能放...

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/08/08 08:32

Async/await

Async/await Async functions async 被放置在一个函数前面: async function a{ return 1} 函数前面的async一词意味着一个简单的事情:这个函数总是返回一个promise,如果代码中有return <非promise>语...

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

async与defer

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

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

async妙用

简介 async函数是Generator 函数的语法糖,async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。 async函数对Generator 函数的改进点有以下几点: 内置执行器,不需要像Gener...

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

async/await

async函数 申明函数时在function前面加上关键字async,如下 async function test1(){ return 1; } test1().then((res)=>{ console.log(res);//打印1 }); async function test2(){ return new Promise((resol......

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

async 和 await

async和await的使用 async async 异步执行 用法: async function name () { return 'hello' } console.log(name()) console.log('world') async 后面的函数的执行不会阻碍后面console的执行,两个语句......

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