php中文网

Golang 函数:用 context.WithTimeout 创建带超时的子上下文

php中文网

context.withtimeout() 函数用于创建带超时的子上下文,子上下文超时或父上下文被取消时,子上下文也会被取消。其使用方法如下:创建父上下文。调用 context.withtimeout(parent, timeout) 创建子上下文,其中 parent 为父上下文,timeout 为子上下文的超时时间。调用子上下文的 cancelfunc 取消子上下文,无论是否超时。

Golang 函数:用 context.WithTimeout 创建带超时的子上下文

context.WithTimeout 函数在 Go 中用于创建一个新的子上下文,并为其设定一个超时。当子上下文超时或父上下文被取消时,子上下文也会被取消。

语法:

立即学习“go语言免费学习笔记(深入)”;

func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)

其中:

  • parent:父上下文
  • timeout:子上下文的超时时间

返回:

  • Context:新的子上下文
  • CancelFunc:取消子上下文的函数

实战案例:

以下示例演示了如何使用 context.WithTimeout 函数:

package main

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

func main() {
    // 创建父上下文
    ctx := context.Background()

    // 创建一个为期 1 秒的子上下文
    subCtx, cancel := context.WithTimeout(ctx, 1*time.Second)
    defer cancel()

    // 在子上下文中执行任务
    go func() {
        for {
            select {
            case <-subCtx.Done():
                return
            default:
                fmt.Println("任务仍在运行...")
            }
        }
    }()

    // 等待子上下文完成
    <-subCtx.Done()
    fmt.Println("子上下文超时或被取消")
}

注意:

  • 当 WithTimeout 超时时,它会发送一个 context.DeadlineExceeded 错误。
  • 如果父上下文被取消,所有子上下文也会被取消,无论它们是否超时。
  • 调用 CancelFunc 函数可以立即取消子上下文。

以上就是Golang 函数:用 context.WithTimeout 创建带超时的子上下文的详细内容,更多请关注php中文网其它相关文章!