[有条件锁定

问题描述 投票:0回答:2

据我所知,lock语句会不加选择地锁定任何试图执行此代码块的后续实例的代码。

我需要基于当前用户(由userCode表示)锁定代码块。如果具有不同userCode的用户尝试执行代码块,则必须让其通过。但是,如果具有相同userCode(先前已锁定)的用户尝试执行操作,则必须停止该操作,直到另一个实例释放它为止。我如何实现此条件锁定

private async Task PerformShop(string clientCode){
  lock(clientCode){ //if other user with the same clientCode has locked the block, this current user has to wait. If not, it has to perform code the block.
    performCreditValidation();
    performShop();
  }
}
c# locking
2个回答
0
投票

白色,是的,您可以通过应用程序和Web与同一用户访问。想象同一位用户从应用程序和网络登录,然后他们同时在网上购物。他们两个都已经执行了信用验证,但是其中一个比另一个更早地进入商店,这可能是一个问题,因为我们基于可用信用来允许商店。

所以您在Web / API开发中遇到问题?在这里,锁[甚至是[[remote]]正确的工具。如前所述,它仅处理线程级同步。您想要的听起来像是“每个用户只允许一个活动会话”,即使用户可能正在多个设备上管理该会话。它使用了基本的会话机制,但又有所不同:

[如果用户登录,但该用户的会话仍在运行-将获得该会话ID。但是,这可能会导致一些安全问题,因为它可能会使1个会话长时间存活。您确实应该使用适当的标签重新提问。

作为在线商店,您可能甚至需要处理一些额外的问题-访客可以登录或不登录就可以浏览和使用购物车。但是,一旦他们登录,他们的登录前购物车将被取消。如果Wich登录到其他设备上,可能会导致Marges的破坏。]


-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.