3.1コンテキストのコードサンプルを行きます

context.WithCancelは
、2つの関連オブジェクトを返すCTXとキャンセル、ヌル構造体CTXを送信する呼び出しをキャンセルする、CTXは一度実行ゴルーチンを終了するオブジェクトを受信するステップと、
CTXは、スレッドセーフである、それは同時に複数に送信することができますゴルーチン、キャンセルトリガ、すべてのゴルーチンの実行をキャンセル
パッケージメイン

インポート(
    " コンテキスト" 
    " FMT " 
    " 時間" 

testContext FUNC(){ 
    CTX、キャンセル: = context.WithCancel(context.Background())
    D1(CTX)が行く
    D2(CTX)行く
    
    time.Sleep(7 * time.Second)は
    ()キャンセル
} 

FUNCさd1(CTX context.Context){ 
    た:i = 0 
    のために{ 
        time.Sleep(1 * time.Second)
        iは ++
         選択{
             ケース < -ctx.Done():
                fmt.Println(" オーバーD1 " 戻り
                
            デフォルト
                fmt.Println(" D1 " 、I)
        } 
    } 
} 

FUNCさd2(CTX context.Context){ 

    fmt.Println(" 開始d2は"  < - ctx.Done()
    fmt.Println(" D2オーバー" 
} 

FUNCのmain(){ 
    testContext()
    fmt.Println(" 主オーバー" 
}

輸出

開始d2は
D1   1 
、D1   2 
D1   3 
D1   4 
D1   5 
D1   6 
メイン上

 

おすすめ

転載: www.cnblogs.com/perfei/p/11529122.html