写在前面
Future/Promise 常用于在异步编程里以同步的写法来表现。不同的编程语言对此有各自语言特性的表现。
内容
Dart
void main() async {
var futures = await Future.wait([longTimeRequest(), longTimeRequest()]);
var a = futures[0];
var b = futures[1];
print(sumSquares(a, b));
}
Future<int> longTimeRequest() async {
sleep(Duration(seconds: 3));
return Random().nextInt(100);
}
int sumSquares(int a, int b) {
return a * a + b * b;
}
Golang
// 执行顺序是先返回通道,由于使用了 <-a, <-b,所以会阻塞,直到 go 协程里的数据返回
func longTimeRequest() <-chan int32 {
r := make(chan int32)
go func() {
time.Sleep(3 * time.Second)
r <- rand.Int31n(100)
}()
return r
}
func sumSquares(a, b int32) int32 {
return a*a + b*b
}
func main() {
rand.Seed(time.Now().UnixNano())
a, b := longTimeRequest(), longTimeRequest()
fmt.Println(sumSquares(<-a, <-b))
}