github.com/nibnait/go-learn@v0.0.0-20220227013611-dfa47ea6d2da/src/test/chapter/ch4/26_async_service_test.go (about)

     1  package ch4
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  	"time"
     7  )
     8  
     9  func service1() string {
    10  	time.Sleep(time.Millisecond * 50)
    11  	return "Done"
    12  }
    13  
    14  func otherTask() {
    15  	fmt.Println("working on something else")
    16  	time.Sleep(time.Millisecond * 100)
    17  	fmt.Println("Task is done.")
    18  }
    19  
    20  func TestService(t *testing.T) {
    21  	fmt.Println(service())
    22  	otherTask()
    23  }
    24  
    25  func AsyncService1() chan string {
    26  	// 不带 buffer 的 channel,要等消息从 channel 中消费掉,才能退出 service
    27  	// retCh := make(chan string)
    28  	// buffer 的 channel, 可以不用等消息从 channel 消费掉,直接退出 service
    29  	retCh := make(chan string, 1)
    30  	go func() {
    31  		ret := service1()
    32  		fmt.Println("returned result.")
    33  		retCh <- ret
    34  		fmt.Println("service exited.")
    35  	}()
    36  	return retCh
    37  }
    38  
    39  //
    40  func TestAsynService(t *testing.T) {
    41  	retCh := AsyncService1()
    42  	otherTask()
    43  	fmt.Println(<-retCh)
    44  	time.Sleep(time.Second * 1)
    45  }