WebAPI 防止竞争条件

Dus*_*ine 4 c# sql-server asp.net-web-api

我有一个 WebAPI POST 控制器方法,基本上只是将带有数量值的记录插入表中。我需要根据可用数量检查该数量。问题是我可以同时进行多个提交,并且希望消除任何可能的竞争条件。

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

有人有任何指点吗?

Rom*_*Mik 5

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

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

我假设您的数据库事务涉及这些步骤?: 1)新记录插入数量 2)数量更新(新总数 = 总数 - 数量) 它们必须同时发生或根本不发生?

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

您需要谷歌搜索如何为您的数据库实现乐观并发。简单来说,就是表上的一个时间戳,不能盲目修改。当更新发送到数据库时,它包含更新之前检查过的时间戳值,如果仍然匹配,则事务通过,如果值不同,则事务中止。