package main
import "time"
import "log"
import "fmt"
var delayA uint = 3
var delayB uint = 3
func longCalc(x int, delay uint) int {
return x
}
func longCalcAsync(x int, delay uint) (chan int) {
result := make(chan int)
go func() {
result <- longCalc(x, delay)
}()
return result
}
func bar() {
}
// --------------------------------
func foo1() {
a := <- longCalcAsync(1, delayA)
b := <- longCalcAsync(2, delayB)
}
func foo2() {
ca := longCalcAsync(1, delayA)
cb := longCalcAsync(2, delayB)
a := <- ca
b := <- cb
}
func foo3a() {
a := longCalc(1, delayA)
b := longCalc(2, delayB)
}
func foo3b() (chan bool) {
done := make(chan bool)
go func() {
foo3a()
done <- true
}()
return done
}
// --------------------------------
func test1() {
go foo1()
bar()
}
func test2() {
go foo2()
bar()
}
func test3a() {
go foo3a()
bar()
}
func test3b() {
done := foo3b()
bar()
<- done
}
// --------------------------------
func init() {
}
func main() {
test1()
fmt.Println("--------")
test2()
fmt.Println("--------")
test3a()
fmt.Println("--------")
test3b()
}
cGFja2FnZSBtYWluCgppbXBvcnQgInRpbWUiCmltcG9ydCAibG9nIgppbXBvcnQgImZtdCIKCnZhciBkZWxheUEgdWludCA9IDMKdmFyIGRlbGF5QiB1aW50ID0gMwoKZnVuYyBsb25nQ2FsYyh4IGludCwgZGVsYXkgdWludCkgaW50IHsKCWxvZy5QcmludGxuKCJjYWxjIiwgeCkKCXRpbWUuU2xlZXAodGltZS5EdXJhdGlvbihkZWxheSkgKiB0aW1lLlNlY29uZCkKCWxvZy5QcmludGxuKCJkb25lIiwgeCkKCXJldHVybiB4Cn0KCmZ1bmMgbG9uZ0NhbGNBc3luYyh4IGludCwgZGVsYXkgdWludCkgKGNoYW4gaW50KSB7CglyZXN1bHQgOj0gbWFrZShjaGFuIGludCkKCWdvIGZ1bmMoKSB7CgkJcmVzdWx0IDwtIGxvbmdDYWxjKHgsIGRlbGF5KQoJfSgpCglyZXR1cm4gcmVzdWx0Cn0KCmZ1bmMgYmFyKCkgewoJbG9nLlByaW50bG4oImJhciIpCn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCmZ1bmMgZm9vMSgpIHsKCWEgOj0gPC0gbG9uZ0NhbGNBc3luYygxLCBkZWxheUEpCgliIDo9IDwtIGxvbmdDYWxjQXN5bmMoMiwgZGVsYXlCKQoJbG9nLlByaW50bG4oImZvbyIsIGEsIGIpCn0KCmZ1bmMgZm9vMigpIHsKCWNhIDo9IGxvbmdDYWxjQXN5bmMoMSwgZGVsYXlBKQoJY2IgOj0gbG9uZ0NhbGNBc3luYygyLCBkZWxheUIpCglhIDo9IDwtIGNhCgliIDo9IDwtIGNiCglsb2cuUHJpbnRsbigiZm9vIiwgYSwgYikKfQoKZnVuYyBmb28zYSgpIHsKCWEgOj0gbG9uZ0NhbGMoMSwgZGVsYXlBKQoJYiA6PSBsb25nQ2FsYygyLCBkZWxheUIpCglsb2cuUHJpbnRsbigiZm9vIiwgYSwgYikKfQoKZnVuYyBmb28zYigpIChjaGFuIGJvb2wpIHsKCWRvbmUgOj0gbWFrZShjaGFuIGJvb2wpCglnbyBmdW5jKCkgewoJCWZvbzNhKCkKCQlkb25lIDwtIHRydWUKCX0oKQoJcmV0dXJuIGRvbmUKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKZnVuYyB0ZXN0MSgpIHsKCWdvIGZvbzEoKQoJYmFyKCkKCXRpbWUuU2xlZXAoMTAgKiB0aW1lLlNlY29uZCkKfQoKZnVuYyB0ZXN0MigpIHsKCWdvIGZvbzIoKQoJYmFyKCkKCXRpbWUuU2xlZXAoMTAgKiB0aW1lLlNlY29uZCkKfQoKZnVuYyB0ZXN0M2EoKSB7CglnbyBmb28zYSgpCgliYXIoKQoJdGltZS5TbGVlcCgxMCAqIHRpbWUuU2Vjb25kKQp9CgpmdW5jIHRlc3QzYigpIHsKCWRvbmUgOj0gZm9vM2IoKQoJYmFyKCkKCTwtIGRvbmUKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKZnVuYyBpbml0KCkgewoJbG9nLlNldEZsYWdzKGxvZy5MdGltZSkKfQoKZnVuYyBtYWluKCkgewoJdGVzdDEoKQoJZm10LlByaW50bG4oIi0tLS0tLS0tIikKCXRlc3QyKCkKCWZtdC5QcmludGxuKCItLS0tLS0tLSIpCgl0ZXN0M2EoKQoJZm10LlByaW50bG4oIi0tLS0tLS0tIikKCXRlc3QzYigpCn0=