首页 > 其他分享 >golang context 应用

golang context 应用

时间:2023-05-23 14:57:59浏览次数:40  
标签:context 取消 ctx golang 应用 time cancel 上下文

package main

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

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

	// 派生可取消的上下文
	cancelCtx, cancel := context.WithCancel(ctx)

	// 启动一个 Goroutine 执行任务
	go doTask(cancelCtx)

	// 等待一段时间后取消任务
	time.Sleep(1 * time.Second)
	cancel() // 调用 cancel 函数取消任务

	// 等待任务结束
	time.Sleep(1 * time.Second)
}

func doTask(ctx context.Context) {
	for {
		select {
		case <-ctx.Done():
			fmt.Println("Task canceled")
			return
		default:
			fmt.Println("Running task...")
			time.Sleep(500 * time.Millisecond)
		}
	}
}
在上述示例中,我们首先使用 context.Background() 创建了一个初始的上下文 ctx。然后,使用 context.WithCancel(ctx) 派生了一个可取消的上下文 cancelCtx 和相应的取消函数 cancel。接下来,我们在 doTask() 函数中执行一个任务,并在每次循环中检查上下文的取消信号。

在主函数中,我们等待一段时间后,调用 cancel() 函数取消任务。这会触发与 cancelCtx 关联的上下文的取消信号,使得 doTask() 函数可以感知到任务已被取消,并退出执行。

总之,context.WithCancel(ctx) 用于派生一个可取消的上下文,并返回与之关联的取消函数。通过调用取消函数,可以触发与上下文相关的 Goroutine 的取消信号,从而实现对任务的取消和中止。

标签:context,取消,ctx,golang,应用,time,cancel,上下文
From: https://www.cnblogs.com/securitybob/p/17425175.html

相关文章

  • Android开发 UsageStatsManager应用使用情况管理
    前言  UsageStatsManager是用来知晓,设备中应用的使用情况的管理。它能给我们提供应用的进入前台动作与时间戳、进入后台的动作与时间戳、上次的使用时间、使用总时长等等信息。此功能在原生的设置-应用-使用统计中有所展示。所需权限<uses-permissionandroid:name="android.......
  • Lazada详情接口的应用
    Lazada是东南亚电商领域的一家知名企业,Lazada商品详情接口是Lazada提供的一种获取Lazada平台商品详细信息的接口。本文将介绍Lazada商品详情接口的使用方法和相关注意事项。第一步:申请访问Lazada商品详情接口在使用Lazada商品详情接口之前,需要先向Lazada申请访问该接口的权......
  • 启发式算法在三维装箱问题上的应用
    启发式算法的出现时间比较难以确定,因为很多算法的提出都是在不同的领域和不同的时间段内,而且随着时间的推移,这些算法也在不断地完善和发展。以下是一些比较有代表性的启发式算法及其出现时间:1953年,模拟退火算法(SimulatedAnnealing,SA)模拟退火算法是一种基于固体物理学中固体退火......
  • 关于AI与api-Java接口的区别应用点
    AI和API是目前互联网技术中的两个趋势,它们在许多领域都发挥了重要作用。在技术的领域中,AI代表的是人工智能,而API代表的是应用程序接口。在本文中,将讨论AI和API的详细分析。AI是人工智能的简称,是指通过计算机技术模拟人类智能的一种技术体系。AI可以学习数据并自我改进,以达到更好的......
  • 无线振弦传感采集仪在工程监测中的应用解决方案
    无线振弦传感采集仪在工程监测中的应用解决方案 无线振弦传感采集仪是一种高性能的工程监测设备,具有多种优点,如无线传输、高精度、高灵敏度和高可靠性等。在工程监测领域,无线振弦传感采集仪被广泛应用于桥梁、隧道、建筑物等结构物的动态监测、损伤诊断、安全评估和监测预警等......
  • ADG级联备库环境PSU应用验证
    上篇文章源端为备库的场景下Duplicate失败问题我只在中间备库环境应用了PSU,解决了级联备库从中间备库duplicate数据库的问题:细心的朋友已经发现,因为是备库环境,并没有做数据库执行相关脚本部分,所以如果去DB查询补丁应用信息是没有的:SQL>r1*select*fromdba_registry_......
  • 盘点界面控件DevExpress WinForms的几大应用程序主题
    DevExpressWinForm控件包含了50+个自定义皮肤,其中涵盖了MicrosoftOffice和Windows11启发式的应用程序主题。PS:DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForm能完美构建流畅、美观且易于使用的应用程序,无论是Of......
  • 浅析视频技术与AI智能识别技术在智慧矿山场景中的应用
    一、背景分析 能源与矿业是我国国民经济的重要物质生产部门和支柱产业之一,同时也是一个安全事故多发的高危行业,施工阶段的现场管理对工程成本、进度、质量及安全等至关重要。国家矿山安监局陆续发布(矿安〔2022)128号)文、(矿安综〔2023〕5号)文推动矿山重大灾害风险防控,山西、......
  • LLM 应用于编程辅助调研
    目录前言一、能做什么二、局限性三、效果展示四、业界应用五、多产品对比Copilot六、总结1.多产品成熟度2.编程辅助3.业务场景前言AI辅助编程出现之前需要简单重复技艺的修炼,也就是拔刀速度影响了发挥,今后拔刀速度可以忽略了。往后的开发可以思考道为主,反正简单重复技艺的部分......
  • FreeRTOS应用基础(一)
      本系列主要作为自己第一次系统学习RTOS的记录,以正点原子的STM32F103战舰,keil环境编程为例。想要达到以下目标:  1:初步熟悉FreeRTOS的移植和使用,并迁移完成一个小型项目;  2:以FreeRTOS为入门,了解RTOS的本质,并提升阅读源码的能力;  本系列文章主要参考以下资料,本文仅作为......