假设我有以下函数:
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内调用。
对于这种特定的情况,我只需要一个例子。
发布于 2018-10-26 04:14:43
您只需传递与参数相同的上下文,但是当您等待来自channel\remote server\任何内容的结果时,您使用select语句等待<- ctx.Done()。每当上下文被取消(通过取消功能或由于超时)时,内部通道将被关闭,并且接收操作总是在关闭的通道上解除阻塞。
关于取消的一般帖子(没有上下文,但在心理上用ctx.Done()替换doneCh ) https://blog.golang.org/pipelines
谈论cancelation (第15页的上下文示例) https://talks.golang.org/2014/gotham-context.slide#15
几个示例https://www.sohamkamani.com/blog/golang/2018-06-17-golang-using-context-cancellation/
https://stackoverflow.com/questions/52996705
复制相似问题