go promise 异步函数实现

转:https://studygolang.com/articles/15809

夜丿未央 · 2018-10-26 15:34:40 · 288 次点击 · 预计阅读时间 1 分钟 · 3分钟之前 开始浏览    

这是一个创建于 2018-10-26 15:34:40 的文章,其中的信息可能已经有所发展或是发生改变。
go 语言的promise异步函数

go 语言的异步书写方式就不再赘述,相关的资料网上有很多。通过一些简单的学习之后,我一直觉使用方式很别扭,比如我想异步并在函数执行之前不退出程序,就需要用在代码中往管道中写值,并读出来值,否则就会死锁。
后来思考之后,试着实现了一个通用的方法,该方法并未实现绝对的通用,但是至少是一个改善的思路。有幸感兴趣的朋友如果恰巧看到该实现,觉得有趣可以一起探讨。

代码如下

promise.go

package promise

import "sync"

type Promise struct {
    wg sync.WaitGroup
}

func (p *Promise) Add(f func()) {
    p.wg.Add(1)
    go func() {
        f()
        defer p.wg.Done()
    }()
}

func (p *Promise) End() {
    p.wg.Wait()
} 

main.go

package main

import (
    "fmt"
    "promise"
)

func t(i int) func() {
    return func() {
        fmt.Println(i)
    }
}

func main() {
    var promise promise.Promise
    promise.Add(t(1))
    promise.Add(t(2))
    promise.End()
}
// print -> 2 
// print -> 1

标签: golang
2019.9.23   /   热度:1177   /   分类: golang

发表评论:

©地球仪的BLOG  |  Powered by Emlog