P212 · 工具调用

更新前读取当前版本号

Read fresh version tokens before update

用资源最新的并发版本令牌执行写入,避免覆盖别人刚做的修改。

编辑审核

以下示例与示意结果由本站编写,用于说明方法,不是模型实测结果。

使用场景

共享空间要改名,另一人可能同时修改描述。教学读取返回空间身份、名称A、描述D、版本12;服务写入必须比较原样版本令牌。读取之后仍可能变化,最新读取不是锁。

具体做法

紧邻写入读取当前对象与并发令牌,构造只改变所需字段的请求。服务检测冲突时重读并比较各方意图,保留别人修改,不强推旧快照。版本令牌不自行增加或重建;若服务无条件写,不能声称已提供并发保护。授权与令牌检查分别满足。

反例

用昨天版本11和整对象快照覆盖空间,冲突就忽略版本重发,把他人描述D2改回D。

改进写法

教学读当前空间/版本12,按服务契约用12提交所需改名,保留当前其他字段。若别人改描述成D2导致版本冲突,重读新对象和令牌,核对后合并仅改名意图,不覆盖D2或自造版本。读权限不等于写权限,写入按用户范围;无法确认冲突语义时报告缺口。

为什么这样改

并发令牌把写入与某次读取绑定,能发现其间变化。局部意图与冲突协调保留双方工作,而不是把服务拒绝当需要绕过的障碍。

如何验证

教学正常版本12成功,插入另一人修改后旧令牌被拒,重读保留D2并使用真实新令牌。检查写请求身份、范围、令牌与读取对应。

只有新读而无服务条件比较不能证明无竞争;本篇不改真实空间。

适用边界

令牌可能不透明,规则随服务变化,冻结sys.version/SyncToken是实例。需要重试上限与冲突处理,版本核验不证明内容正确或提供额外权限。

原文与版本

如何收录这些方法