Future 模式
假如你没写作业,第二天上课的时候,老师收作业,你拿了一个空本,把空本交上去了,然后,此刻,你奋笔疾书的补作业,在老师批到你的作业的时候,你已经补完了作业,老师打开你的空本,说张三,你怎么交了一个空本上来。你故作尴尬的说,不是吧?难道交错了?然后你佯装镇定的从书包里掏出你补完的作业本,交给了老师大人。好一招儿借尸还魂。
Future模式,是异步编程的一种并发模式,在执行异步方法的时候,他会直接返回一个结果给你,但是该结果不可用,直到异步方法执行后,产生有效的结果,此时会对反馈给你的结果进行填充,并通知你,可以使用处理的结果了。
package main
import (
"fmt"
"time"
)
func FutureGo[T any](f func(result chan<- T)) chan T {
resultChan := make(chan T, 10)
go func() {
f(resultChan)
close(resultChan)
}()
return resultChan
}
func main() {
result := FutureGo(func(result chan<- string) {
// 业务逻辑,返回值用result带回去
time.Sleep(time.Second * 5)
result <- "作业补完了,偷摸交上去"
})
fmt.Printf("%v\n", result)
fmt.Println("继续向下执行,异步操作")
fmt.Printf("%v\n", <-result)
}