go
runtime_error
ai_generated
true
rpc error: code = Canceled desc = context canceled
ID: go/grpc-canceled-context-cancelled
80%Fix Rate
86%Confidence
0Evidence
2025-03-05First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 1.0 | active | — | — | — |
| 1.1 | active | — | — | — |
Root Cause
The client cancelled the context before the RPC completed, often due to user action or timeout.
generic中文
客户端在RPC完成之前取消了上下文,通常是由于用户操作或超时。
Workarounds
-
90% success Create a new context for each RPC call to avoid using cancelled contexts.
ctx := context.Background() resp, err := client.SomeRPC(ctx, req) if err != nil { if status.Code(err) == codes.Canceled { // Create new context and retry if appropriate ctx2 := context.Background() resp, err = client.SomeRPC(ctx2, req) } } -
85% success Handle cancellation gracefully by checking context errors.
select { case <-ctx.Done(): return nil, ctx.Err() default: } resp, err := client.SomeRPC(ctx, req)
Dead Ends
Common approaches that don't work:
-
Ignore the cancellation and retry with the same context.
100% fail
The cancelled context cannot be reused; a new context is needed.
-
Remove context cancellation logic entirely.
90% fail
This can lead to resource leaks and unresponsive applications.