我有一个 ASP.Net Web 应用程序,可以将客户呼叫到一个站点。五名员工同时运行此应用程序,当他们看到客户走进来时,他们单击 ButtonGetCustomer 来呼叫客户并来到他们的站点。
这是我的问题。我从 SQL 获取数据并将其存储在数据表中。有时,当两个或多个职员同时点击时,他们会呼叫同一个客户。
关于如何防止这种情况发生的任何想法?
我遇到了类似的问题,成千上万的人点击同一个按钮试图申请有限数量的位置。这是一个类似的解决方案:
所以点击按钮的人要么成功并看到了客户,要么收到一条消息说客户已经被看到了。
您遇到的问题是并发问题。尝试将数据表的读取包装在锁定语句中(有几个),您计划返回到调用线程的记录应该被标记,以便它们不会被其他线程拾取,尝试这样的事情:
private Object _syncObject = new Object();
private DataTable yourDataReadMethod() {
lock(_syncObject)
{
// Read records to return to calling thread.
// Flag records read so they are not given to other threads. You might need expiration date in case the records are not completed in a timely manner.
}
}
此外,如果您在通话后更新记录,您应该将数据库上次更新日期与客户端表单中保留的日期进行比较;如果它们不同,则引发异常,因为这意味着其他人已经更新了记录。希望这会有所帮助。