我有一个 WebAPI POST Controller 方法,它基本上只是将带有数量值的记录插入到表中。我需要根据可用数量检查该数量。问题是我可以同时进行多个提交,并且想消除任何可能的竞争条件。
有很多方法可以做到这一点,但我正在尝试确定最佳方法。我想到了使用队列,但随后客户端设备将需要进行检查以查看状态。我想到了使用单例模式,但是客户端将不得不等待发布。
谁有什么指点?
最佳答案
您的问题与WebAPI无关,而是与您的数据和数据管理层有关。 WebAPI 不应该关心数据,它的作用是接受请求并发回响应。响应取决于输入数据、验证、业务逻辑等。
你的问题是经典的并发控制问题。答案有很多,正确的答案取决于您的系统和架构。
我假设您的数据库事务涉及这些步骤? : 1)新记录插入数量 2)数量更新(新总数=总数-数量) 它们必须一起发生还是根本不会发生?
一种方法是 Optimistic Concurrency .让数据库(或您的 ORM(即 Entity Framework ))告诉您数量计数器是否过时,如果过时,请再次查询并验证可用数量是否仍然有效。
您需要通过谷歌搜索如何为您的数据库实现开放式并发。简单来说就是表上的时间戳,不能盲目修改。当更新被发送到数据库时,它包含更新前检查过的时间戳值,如果仍然匹配,则事务通过,如果值不同,则事务中止。
关于c# - WebAPI 防止竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30383290/