Go에서 컨텍스트는 기한 및 취소 토큰과 같은 실행 관련 정보를 전달합니다. 그러나 특정 시나리오에서는 동일한 데이터를 공유하지만 원래 컨텍스트 취소에 영향을 받지 않는 별도의 컨텍스트를 생성해야 할 수도 있습니다.
현재 작업은 "클론"을 생성하는 것입니다. "(또는 다음과 같은 Go 컨텍스트 ctx의 복사본):
context.Context는 인터페이스이므로 취소 신호를 무시하는 자체 구현을 정의할 수 있습니다. 예는 다음과 같습니다.
package main import ( "context" "time" ) type noCancel struct { ctx context.Context } func (c noCancel) Deadline() (time.Time, bool) { return time.Time{}, false } func (c noCancel) Done() <-chan struct{} { return nil } func (c noCancel) Err() error { return nil } func (c noCancel) Value(key interface{}) interface{} { return c.ctx.Value(key) } // WithoutCancel returns a context that is never canceled. func WithoutCancel(ctx context.Context) context.Context { return noCancel{ctx: ctx} } func main() { ctx := context.Background() clone := WithoutCancel(ctx) // Create a goroutine using the clone context. go func() { // This goroutine will never be interrupted by cancelations on `ctx`. time.Sleep(time.Second) }() }
WithinCancel 함수를 사용하여 모든 함수 또는 메서드 내에서 복제 컨텍스트를 생성할 수 있습니다.
func f(ctx context.Context) { // Create a non-cancelable clone. clone := WithoutCancel(ctx) // Start an async task using the clone context. go func() { // This goroutine will not be affected by cancellations on `ctx`. }() }
이 솔루션은 취소되지 않는 컨텍스트를 생성하는 간단한 방법을 제공하므로 원래 컨텍스트보다 오래 지속되는 비동기 작업을 수행할 수 있습니다. 이는 컨텍스트 취소로 인한 백그라운드 작업의 조기 종료를 방지하려는 경우 특히 유용합니다.
위 내용은 Go에서 취소를 무시하는 컨텍스트를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!