程序开发 · 2024年2月11日

如何在函数调用链中使用 context.Context 并取消

当前位置: > > > > 如何在函数调用链中使用 context.Context 并取消

来源:stackoverflow
2024-04-24 15:27:36
0浏览
收藏

哈喽!今天心血来潮给大家带来了《如何在函数调用链中使用 context.Context 并取消》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

假设我有这些功能:

func A(ctx context.Context) {
    // A takes some time to process
}

func B(ctx context.Context) {
    // B takes some time to process
}

func C(ctx context.Context) {
    // C takes some time to process
}

注意:每个函数调用都需要一些时间来处理。

注意:b 应该在函数 a 内部调用,c 应该在函数 b 内部调用。

只需要一个针对这种特定情况的示例。

解决方案

您只需传递与参数相同的上下文,但每当您等待来自通道\远程服务器\任何内容的结果时,您都可以使用 select 语句来等待 <- ctx.Done()。每当上下文被取消(通过取消函数或由于超时)时,内部通道将被关闭,并且接收操作始终在关闭的通道上解除阻塞。

关于取消的一般帖子(没有上下文,但在心里用 ctx.Done() 替换 didCh)

谈论取消(第 15 页的上下文示例)

几个例子

本篇关于《如何在函数调用链中使用 context.Context 并取消》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注公众号!