使用context关闭协程以及协程中的协程

Posted csir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用context关闭协程以及协程中的协程相关的知识,希望对你有一定的参考价值。

package main

import (
    "sync"
    "context"
    "fmt"
    "time"
)

var wg sync.WaitGroup

func worker2(ctx context.Context) {
    LOOP:
        for {
            fmt.Printf("worker2
")
            time.Sleep(time.Second)
            select {
            case <- ctx.Done():
                break LOOP
            default:
            }
        }
}


func worker(ctx context.Context) {
    go worker2(ctx)
    LOOP:
        for {
            fmt.Printf("worker
")
            time.Sleep(time.Second)
            select {
            case <- ctx.Done():
                break LOOP
            default:

            }
        }
    wg.Done()
}

func main() {
    ctx := context.Background()
    ctx, cancel := context.WithCancel(ctx)
    wg.Add(1)
    go worker(ctx)
    //time.Sleep(time.Second*3)
    cancel()
    wg.Wait()
}

以上是关于使用context关闭协程以及协程中的协程的主要内容,如果未能解决你的问题,请参考以下文章

你应该知道的协程中的挂起转化小技巧

Kotlin 协程Flow 异步流 ⑤ ( 流的上下文 | 上下文保存 | 查看流发射和收集的协程 | 不能在不同协程中执行流的发射和收集操作 | 修改流发射的协程上下文 | flowOn函数 )

Kotlin 协程Flow 异步流 ⑤ ( 流的上下文 | 上下文保存 | 查看流发射和收集的协程 | 不能在不同协程中执行流的发射和收集操作 | 修改流发射的协程上下文 | flowOn函数 )

Unity中的协程用法以及注意事项

Kotlin 协程协程中的多路复用技术 ① ( 多路复用技术 | await 协程多路复用 | Channel 通道多路复用 )

Unity优化如何实现Unity编辑器中的协程