WebAPI防止竞争条件

本文关键字:条件 竞争 WebAPI | 更新日期: 2023-09-27 17:50:16

我有一个WebAPI POST控制器方法,基本上只是将一个带有数量值的记录插入到表中。我需要把这个数量与可用数量核对一下。问题是,我可以有多个提交发生在同一时间,并希望消除任何可能的竞争条件。

有很多方法可以做到这一点,但我正在努力确定最好的方法。我想过使用队列,但随后客户机设备将需要进行检查以查看状态。我想使用单例模式,但这样客户端就不得不等待发布。

谁有什么建议?

WebAPI防止竞争条件

您的问题与WebAPI无关,而是与您的数据和数据管理层有关。WebAPI不应该关心数据,它的作用是接受请求并发回响应。响应取决于输入数据、验证、业务逻辑等等。

你的问题是一个经典的并发控制问题。答案有很多,正确的答案取决于你的系统和架构。

我假设您的数据库事务包含这些步骤?:新记录插入与数量2)数量更新(新合计=合计-数量)它们必须同时发生,或者根本不发生?

一种方法是乐观并发。让数据库(或您的ORM(即实体框架))告诉您数量计数器是否过期,如果过期,请再次查询并验证可用数量是否仍然有效。

你需要谷歌一下如何为你的数据库实现乐观并发。简而言之,它是不能盲目修改的表上的时间戳。当更新发送到数据库时,它包含更新之前检查过的时间戳值,如果它仍然匹配,则事务继续进行,如果值不同,则事务终止。