gpt4 book ai didi

c# - 一次只允许一个用户访问操作

转载 作者:行者123 更新时间:2023-11-30 21:27:57 25 4
gpt4 key购买 nike

我有一个与 web api 通信的 ASP.NET Core 应用程序。有一个涉及几个步骤的业务操作(在一页上做某事,转到下一页和下一页)。这一多步操作是在一个元素的上下文中完成的。

假设您有一个一些业务对象的列表,您的任务是从该列表中接受对象 3。接受是我们的多步操作,如果我当前正在接受对象 3,则其他任何人都不能进入对象 3 的接受操作。当我完成操作时,它应该被解锁。希望问题是可以理解的。

我们不想要非常耗时的解决方案,最简单的想法是创建一个数据库表来指示用户何时开始操作,它保存对象的 ID 和用户的 ID,并在例如 5 分钟后自动删除自身,如果其他人想要访问操作,我们检查它是否被这个对象阻止。但它有点 hacky 并且不是很干净(如果用户去喝咖啡并在 10 分钟后继续操作怎么办?)

我正在寻找一种更好的方法来实现这种行为并感谢任何想法

最佳答案

如果我要实现这种行为,我也会使用数据库,但方式有点不同。我将创建一个包含对象的表(对象 3 是其中的一行),为 UserId 添加一列,boolean OnProcess (标记对象是否在进程中)和 StartProcess 的时间戳。

要让用户能够输入操作,请运行如下查询:

UPDATE Objects SET UserId = <CurrentUser>, StartProcess = <NOW>, OnProcess = true
OUTPUT Object.Id
WHERE Object.Id == 3 AND
(
OnProcess == false
OR ( OnProcess == true AND UserId == <CurrentUser> )
OR ( StartProcess <is more than 15 minutes ago>)
)

免责声明:上面的查询不是可执行查询,但应该足够清楚以理解它的作用。

通过上面的查询,Object.Id 将在以下情况返回:

  • 该对象未被其他用户处理
  • 对象正在由 CurrentUser 本身处理,同时重置 StartProcess(某种滑动行为)。这样,如果 CurrentUser AFK 给定时间(但不超过阈值时间)然后回来,他/她可以轻松地继续操作
  • 在过去 15 分钟内未处理该对象。这实际上是我在前一点提到的阈值。至于多长时间(在我的示例中为 15 分钟),完全由您决定。

如果为用户返回了 Object.Id,那么他/她就可以进入操作。

关于c# - 一次只允许一个用户访问操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56954874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com