当前位置: 首页 > wzjs >正文

国家pccm建设申报网站百度无锡营销中心

国家pccm建设申报网站,百度无锡营销中心,电影网站做视频联盟,六安做网站的公司Go语言中的context包提供了一种在不同Goroutines之间传递取消信号、超时、截止日期和请求范围值的方法,用于更好地管理并控制并发操作。 WithCancel 在这个示例中,我们首先创建了一个带有取消功能的context,然后启动了一个Goroutine来执行某…

Go语言中的context包提供了一种在不同Goroutines之间传递取消信号、超时、截止日期和请求范围值的方法,用于更好地管理并控制并发操作。

WithCancel

在这个示例中,我们首先创建了一个带有取消功能的context,然后启动了一个Goroutine来执行某项工作,这个Goroutine在工作过程中定期检查ctx.Done()通道,如果接收到取消信号,则停止工作。在main函数中,我们等待了一段时间,然后调用cancel函数,以发送取消信号。在取消信号发送后,Goroutine会收到信号并停止工作。

package main

import (

    "context"

    "fmt"

    "time"

)

func doSomething(ctx context.Context) {

    for {

        select {

        case <-ctx.Done():

            fmt.Println("Received cancellation signal. Cleaning up...")

            return

        default:

            // Simulate some work

            fmt.Println("Working...")

            time.Sleep(1 * time.Second)

        }

    }

}

func main() {

    // 创建一个带有取消功能的context

    ctx, cancel := context.WithCancel(context.Background())

    // 启动一个Goroutine执行某项工作,传入context

    go doSomething(ctx)

    // 等待一段时间,然后取消工作

    time.Sleep(10 * time.Second)

    cancel() // 调用cancel函数来发送取消信号

    // 等待一段时间,以观察工作是否被取消

    time.Sleep(5 * time.Second)

}

WithTimeout

在这个示例中,我们首先创建一个带有超时控制的 context,并设置最大执行时间为 5 秒。然后,我们启动一个 Goroutine 来执行某项工作。主函数休眠 10 秒以等待 Goroutine 的完成或超时。由于 context.WithTimeout 设置了最大执行时间为 5 秒,因此 Goroutine 会在 5 秒后收到超时信号,结束工作。

context.WithTimeout 可以用于控制并发操作的执行时间,以确保它们不会无限期地运行。这在处理网络请求、I/O 操作、调用外部服务等场景中特别有用,以避免操作长时间阻塞并占用资源。

package main

import (

    "context"

    "fmt"

    "time"

)

func doSomething(ctx context.Context) {

    for {

        select {

        case <-ctx.Done():

            fmt.Println("Received cancellation signal. Cleaning up...")

            return

        case <-time.After(1 * time.Second):

            fmt.Println("Task completed.")

        }

    }

}

func main() {

    // 创建一个带有超时控制的 context,设置最大执行时间为 5 秒

    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)

    defer cancel() // 一定要记得调用 cancel,确保资源得以释放

    // 启动一个 Goroutine 执行某项工作,传入 context

    go doSomething(ctx)

    // 主函数休眠 10 秒,以等待 Goroutine 完成或超时

    time.Sleep(10 * time.Second)

}

WithValue

package main

import (

    "context"

    "fmt"

    "time"

)

func processRequest(ctx context.Context) {

    // 从context中获取请求ID

    requestID, ok := ctx.Value("requestKey").(int)

    if !ok {

        fmt.Println("Request ID not found in context.")

        return

    }

    fmt.Printf("Processing request with ID %d\n", requestID)

}

func main() {

    // 创建一个带有请求ID的context

    ctx := context.WithValue(context.Background(), "requestKey", 12345)

    // 在另一个函数中使用context

    go processRequest(ctx)

    // 主函数休眠一段时间,以确保Goroutine有时间运行

    time.Sleep(5 * time.Second)

}

WithDeadline

context.WithDeadline 方法用于创建一个带有截止日期的 context,允许你设置一个操作的最后截止日期,如果操作在截止日期之后仍未完成,context 会自动取消它。

package main

import (

    "context"

    "fmt"

    "time"

)

func doSomething(ctx context.Context) {

    for {

        select {

        case <-ctx.Done():

            fmt.Println("Received cancellation signal. Cleaning up...")

            return

        case <-time.After(1 * time.Second):

            fmt.Println("Task completed.")

        }

    }

}

func main() {

    // 设置截止日期为当前时间加 5 秒

    deadline := time.Now().Add(5 * time.Second)

    // 创建一个带有截止日期的 context

    ctx, cancel := context.WithDeadline(context.Background(), deadline)

    defer cancel() // 一定要记得调用 cancel,确保资源得以释放

    // 启动一个 Goroutine 执行某项工作,传入 context

    go doSomething(ctx)

    // 主函数休眠 10 秒,以等待 Goroutine 完成或截止日期到达

    time.Sleep(10 * time.Second)

}

context继承

这个例子5秒后结束程序。

package main

import (

    "context"

    "fmt"

    "time"

)

func doSomething(ctx context.Context) {

    for {

        select {

        case <-ctx.Done():

            fmt.Println("Received cancellation signal. Cleaning up...")

            return

        default:

            // Simulate some work

            fmt.Println("Working...")

            time.Sleep(1 * time.Second)

        }

    }

}

func main() {

    // 创建一个带有取消功能的context

    rootCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)

    ctx, cancel := context.WithCancel(rootCtx)

    // 启动一个Goroutine执行某项工作,传入context

    go doSomething(ctx)

    // 等待一段时间,然后取消工作

    time.Sleep(10 * time.Second)

    cancel() // 调用cancel函数来发送取消信号

    // 等待一段时间,以观察工作是否被取消

    time.Sleep(5 * time.Second)

}

http://www.dtcms.com/wzjs/214491.html

相关文章:

  • 网站备案 和 icp西安seo公司
  • 沈阳奇搜建站处理器优化软件
  • 中国网络营销网站东莞seo培训
  • 国外服装设计师网站主流网站关键词排名
  • 体育设施建设网站百度搜索关键词热度
  • 织梦网站模块正规的教育机构有哪些
  • 童装 技术支持 东莞网站建设百度搜索百度
  • 如何做一个单页面的网站全网线报 实时更新
  • 公路建设项目可行性研究报告编制办法哪个网站查最新版网站怎么申请怎么注册
  • dedecms 做门户网站网络推广网络营销软件
  • 网站和网页的区别真正的免费建站在这里
  • python 视频播放网站开发电商关键词一般用哪些工具
  • 如何做枪版电影网站郑州seo外包费用
  • 做赌博网站是什么案件廊坊网站
  • 什么网站做推广最好网络营销与策划
  • 做网站最基本百度风云榜官网
  • 随州网站建设多少钱排名软件
  • 建设网站的总结网络推广好做吗?
  • 网站内容页面怎么做外链一键开发小程序
  • 温岭建设阳光网站企业查询免费
  • 香港企业网站设计公司项目推广方案怎么写
  • 网站开发H5热搜排行榜今日排名
  • 广州企业建设网站重庆网站搜索引擎seo
  • win7做系统网站哪个好推广普通话的重要意义
  • 企业展示网站赚钱软件
  • wordpress gravatar屏蔽烟台seo快速排名
  • 做c 题的网站网络搜索关键词
  • 深圳b2c电子商务网站最近新闻摘抄50字
  • 注册成立公司的基本流程西安seo代理
  • 想自己搞一个视频网站怎么做外链系统