go
runtime_error
ai_generated
true
rpc 错误:代码 = Canceled 描述 = 上下文已取消
rpc error: code = Canceled desc = context canceled
ID: go/grpc-canceled-context
80%修复率
87%置信度
0证据数
2024-07-05首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| google.golang.org/grpc v1.40+ | active | — | — | — |
根因分析
传给 RPC 的上下文在完成前被取消。通常是调用方上下文被取消(父请求结束、客户端断开,或 defer 过早调用 cancel())。
English
The context passed to the RPC was canceled before completion. Usually the caller's context was canceled (parent request ended, client disconnected, or cancel() called early due to a defer).
解决方案
-
85% 成功率
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() resp, err := client.Do(ctx, req)
-
80% 成功率
ctx, cancel := context.WithTimeout(parent, 5*time.Second) defer cancel() // must be after the call that uses ctx resp, err := client.Do(ctx, req)
无效尝试
常见但无效的做法:
-
95% 失败
A canceled context stays canceled; every retry immediately returns Canceled without contacting the server.
-
70% 失败
Loses deadline propagation and cancellation, causing leaked goroutines and requests that outlive their callers.